Built files from Bizgaze WebServer
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

chat.js 259KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776
  1. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  2. function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
  3. return new (P || (P = Promise))(function (resolve, reject) {
  4. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  5. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  6. function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
  7. step((generator = generator.apply(thisArg, _arguments || [])).next());
  8. });
  9. };
  10. var Unibase;
  11. (function (Unibase) {
  12. let Platform;
  13. (function (Platform) {
  14. let Connect;
  15. (function (Connect) {
  16. let Components;
  17. (function (Components) {
  18. class Chat extends Platform.Core.BaseComponent {
  19. constructor() {
  20. super();
  21. this._chatmanager = Platform.Connect.Managers.ChatManager.Instance();
  22. this._chatter = Unibase.Platform.Connect.Components.Chatter.Instance();
  23. this._chatTemplate = Unibase.Platform.Connect.Components.ChatTemplate.Instance();
  24. Chat.currentUser = Unibase.Platform.Membership.Infos.Identity.currentUser;
  25. }
  26. cssFiles() {
  27. var cssfiles = ["tenants/themes/compact/css/style.chat.css"];
  28. return cssfiles;
  29. }
  30. jsFiles() {
  31. var jsfiles = [
  32. 'platform/connect/requests/chat.js',
  33. 'platform/connect/requests/chatgroup.js', 'platform/connect/requests/chatrecipient.js',
  34. 'platform/core/infos/status.js', 'platform/hubs/providers/basepacket.js',
  35. 'platform/core/helpers/datetimehelper/datetimehelper.js', 'platform/connect/enums/groupmessagetype.js', 'platform/connect/enums/messagetype.js', 'platform/connect/components/chat.template.js', 'platform/connect/infos/chatcontact.js'
  36. ];
  37. return jsfiles;
  38. }
  39. html(id, containerid) {
  40. throw new Error("Method not implemented.");
  41. }
  42. load(id, containerid, callback) {
  43. const instance = this;
  44. window.addEventListener("paste", this.copyscreen);
  45. $(window).keydown(function (e) {
  46. if (e.shiftKey || e.ctrlKey && e.which == 13) {
  47. return;
  48. }
  49. else if (e.which == 13) {
  50. e.preventDefault();
  51. }
  52. });
  53. $('.footer-multiaction').click(function () {
  54. $('.message-checkbox').prop("checked", false);
  55. $('.msg-check').addClass('hidden');
  56. $('#chatMsgHeader,.msg-input-wrap').removeClass('hidden').addClass('d-flex');
  57. $('.msg-multiaction-btns').addClass('hidden');
  58. $('#selectedMsgsCountHeader').addClass('hidden');
  59. $('.chatoptions-wrapper').removeClass('hidden');
  60. $('.selected-msgs-count').text(0);
  61. var item = $(this).attr("data-item");
  62. switch (item) {
  63. case "Delete":
  64. Chat.Instance().MultiDelete();
  65. break;
  66. case "Copy":
  67. Chat.Instance().multiplecopy();
  68. break;
  69. case "Star":
  70. Chat.Instance().multiplestar();
  71. break;
  72. case "Forward":
  73. Chat.Instance().forwardDesign("Multi-Forward");
  74. break;
  75. }
  76. });
  77. $('#input_msg_send_chatapp').keyup(function (e) {
  78. const msgInput = $(this);
  79. instance.autoAdjustMsgInputHeight();
  80. var val = msgInput.val().toString();
  81. $('.deleiverduserslist').html('');
  82. $('.readuserslist').html('');
  83. $('.message-info').addClass('hidden');
  84. $('#chatEmojis').addClass('hidden');
  85. $('.msg-compose-options').addClass('hidden');
  86. if ((e.shiftKey) && e.which == 13) {
  87. return;
  88. }
  89. else if (e.ctrlKey && e.which == 13) {
  90. msgInput.val(val + '\n');
  91. }
  92. else if (e.which == 13) {
  93. e.preventDefault();
  94. }
  95. if (msgInput.val() == "" && e.which == 8 || e.which == 46) {
  96. $('#icon_send,.div_CLose').addClass('hidden');
  97. $('.msg-compose-options').removeClass('hidden');
  98. $('#recordaudio').removeClass('hidden');
  99. Chat.istyping = true;
  100. let user = Chat.currentUser;
  101. let _packet = new Unibase.Platform.Connect.Server.Packets.Typing();
  102. _packet.FromUserId = user.userId;
  103. _packet.UserName = user.name;
  104. _packet.ToUserId = Number($('#private_id').val());
  105. _packet.ChatGroupId = Chat.chatGroupId;
  106. _packet.Isprivate = Chat.isPrivate;
  107. _packet.SessionId = user.sessionId;
  108. Unibase.Platform.Connect.Components.Chat.instance._chatter.onTypingStop(_packet, null);
  109. }
  110. else if (e.which == 13 && !e.ctrlKey) {
  111. var val = msgInput.val().toString();
  112. val = val.trim();
  113. if (val != "" || Chat.attachments.length > 0) {
  114. if (Chat.isEdit == true) {
  115. Unibase.Platform.Connect.Components.Chat.Instance().edit(Chat.chatid);
  116. Chat.isEdit = false;
  117. }
  118. else if (msgInput.val() != "" || msgInput.val() != null) {
  119. Unibase.Platform.Connect.Components.Chat.Instance().send();
  120. $('#icon_send').addClass('hidden');
  121. $('#recordaudio').removeClass('hidden');
  122. $('.msg-compose-options').removeClass('hidden');
  123. msgInput.val('').removeAttr('style');
  124. ;
  125. Chat.fileitems = 0;
  126. Chat.istyping = true;
  127. Chat.attachments = [];
  128. let user = Chat.currentUser;
  129. let _packet = new Unibase.Platform.Connect.Server.Packets.Typing();
  130. _packet.FromUserId = user.userId;
  131. _packet.UserName = user.name;
  132. _packet.ToUserId = Number($('#private_id').val());
  133. _packet.ChatGroupId = Chat.chatGroupId;
  134. _packet.Isprivate = Chat.isPrivate;
  135. _packet.SessionId = user.sessionId;
  136. Unibase.Platform.Connect.Components.Chat.instance._chatter.onTypingStop(_packet, null);
  137. }
  138. }
  139. }
  140. else {
  141. if (Chat.istyping) {
  142. Chat.istyping = false;
  143. $('#icon_send').removeClass('hidden');
  144. $('#recordaudio').addClass('hidden');
  145. let user = Chat.currentUser;
  146. let _packet = new Unibase.Platform.Connect.Server.Packets.Typing();
  147. _packet.FromUserId = user.userId;
  148. _packet.UserName = user.name;
  149. _packet.ToUserId = Number($('#private_id').val());
  150. _packet.ChatGroupId = Chat.chatGroupId;
  151. _packet.Isprivate = Chat.isPrivate;
  152. _packet.SessionId = user.sessionId;
  153. Unibase.Platform.Connect.Components.Chat.instance._chatter.onTyping(_packet, null);
  154. }
  155. }
  156. const mentionableContactsEl = $('#mentionableContactList');
  157. if (val != undefined && (val.trim() == "@" || val.includes("@"))) {
  158. var grpdeatails = Chat.grpdetails;
  159. if (Chat.isPrivate) {
  160. var contactInfo = Chat.Instance().getContactInfo(Chat.contactId, Chat.chatGroupId);
  161. const contactObj = {
  162. contactId: Chat.contactId, contactName: contactInfo.contactName, photoUrl: contactInfo.photoUrl
  163. };
  164. const contactsHtml = instance._chatTemplate.getMentionableContactTemplate(contactObj);
  165. mentionableContactsEl.html(contactsHtml);
  166. }
  167. else {
  168. var k = val.split('@');
  169. var a = k[k.length - 1];
  170. grpdeatails = grpdeatails.filter(x => x.contactName.toLowerCase().includes(a.toLowerCase()));
  171. let contactsHtml = '';
  172. for (var i = 0; i < grpdeatails.length; i++) {
  173. const contact = grpdeatails[i];
  174. if (Chat.currentUser.userId != contact.recipientId) {
  175. contactsHtml += instance._chatTemplate.getMentionableContactTemplate(contact);
  176. }
  177. }
  178. mentionableContactsEl.html(contactsHtml);
  179. }
  180. mentionableContactsEl.removeClass('hidden');
  181. $('.mentionble-contact').click(function () {
  182. var s = val.split(" ");
  183. var j = s.slice(0, s.length - 1).join(" ");
  184. var name = j + " " + $(this).attr('data-contactname') + " ";
  185. $('#input_msg_send_chatapp').val(name).focus();
  186. instance.autoAdjustMsgInputHeight();
  187. mentionableContactsEl.addClass('hidden');
  188. });
  189. if (Chat.isPrivate) {
  190. if ((e.keyCode >= 65 && e.keyCode <= 90) || e.keyCode == 32) {
  191. mentionableContactsEl.addClass('hidden');
  192. }
  193. }
  194. }
  195. else {
  196. mentionableContactsEl.addClass('hidden');
  197. }
  198. });
  199. $('#input_msg_send_chatapp').blur(function (e) {
  200. $('.msg-compose-options').removeClass('hidden');
  201. if (!$(e.relatedTarget).closest('.mentionable-contact-list').length) {
  202. $('#mentionableContactList').addClass('hidden');
  203. }
  204. instance.autoAdjustMsgInputHeight();
  205. });
  206. $('#input_msg_send_chatapp').focus(function () {
  207. const val = $(this).val().toString();
  208. if (val != undefined && (val.trim() == "@" || val.includes("@"))) {
  209. $('#mentionableContactList').removeClass('hidden');
  210. }
  211. else {
  212. $('#mentionableContactList').addClass('hidden');
  213. }
  214. instance.autoAdjustMsgInputHeight();
  215. });
  216. $('#icon_send').click(function () {
  217. if (Chat.isEdit == true) {
  218. Unibase.Platform.Connect.Components.Chat.Instance().edit(Chat.chatid);
  219. Chat.isEdit = false;
  220. let user = Chat.currentUser;
  221. let _packet = new Unibase.Platform.Connect.Server.Packets.Typing();
  222. _packet.FromUserId = user.userId;
  223. _packet.UserName = user.name;
  224. _packet.ToUserId = Number($('#private_id').val());
  225. _packet.ChatGroupId = Chat.chatGroupId;
  226. _packet.Isprivate = Chat.isPrivate;
  227. _packet.SessionId = user.sessionId;
  228. Unibase.Platform.Connect.Components.Chat.instance._chatter.onTypingStop(_packet, null);
  229. }
  230. else {
  231. Unibase.Platform.Connect.Components.Chat.Instance().send();
  232. $('#icon_send,#chatEmojis').addClass('hidden');
  233. $('.msg-compose-options').removeClass('hidden');
  234. $('#recordaudio').removeClass('hidden');
  235. $('.quotemessage_' + Chat.chatGroupId).remove('');
  236. Chat.fileitems = 0;
  237. Chat.attachments = [];
  238. if ($('.quotemessage_' + Chat.chatGroupId).text() != "" && $('#input_msg_send_chatapp').val() != "") {
  239. $('.quotemessage_' + Chat.chatGroupId).remove('');
  240. }
  241. Chat.istyping = true;
  242. let user = Chat.currentUser;
  243. let _packet = new Unibase.Platform.Connect.Server.Packets.Typing();
  244. _packet.FromUserId = user.userId;
  245. _packet.UserName = user.name;
  246. _packet.ToUserId = Number($('#private_id').val());
  247. _packet.ChatGroupId = Chat.chatGroupId;
  248. _packet.Isprivate = Chat.isPrivate;
  249. _packet.SessionId = user.sessionId;
  250. Unibase.Platform.Connect.Components.Chat.instance._chatter.onTypingStop(_packet, null);
  251. }
  252. });
  253. $('#txt_chats_clearSearch').click(function () {
  254. $(this).addClass('hidden');
  255. $('#txtSearchChats').val('').trigger('keyup');
  256. });
  257. $('#clearContactsSearch').click(function () {
  258. $(this).addClass('hidden');
  259. $('#txtSearchContacts').val('').trigger('keyup');
  260. });
  261. $('#chatEmojiIcon').click(function () {
  262. $('#chatEmojis').toggleClass('hidden');
  263. });
  264. $('#closeMsgMultiActionBtn').click(function () {
  265. $('#chatMsgHeader,.msg-input-wrap,.chatoptions-wrapper').removeClass('hidden');
  266. $('.msg-input-wrap').addClass('d-flex');
  267. $('#selectedMsgsCountHeader,.messageslist .msg-check').addClass('hidden');
  268. $('.msg-multiaction-btns').addClass('hidden');
  269. $('.message-checkbox').prop("checked", false);
  270. $('.selected-msgs-count').text(0);
  271. $('#chatFooter').removeClass('hidden');
  272. Chat.MultiSelect = [];
  273. });
  274. $('#closeChatPanel').click(function () {
  275. $(".settings-panel-close").click();
  276. if (Chat.isFullScreen) {
  277. Chat.isFullScreen = false;
  278. $('#cam_pic').length && instance.closecam();
  279. $('#chatPanelBodyWrap').html('').removeClass('chat-fullscreen').detach().appendTo('.settings-panel-wrap');
  280. }
  281. Chat.routes = [];
  282. });
  283. $('#viewMyProfile').click(function () {
  284. Chat.isPrivate = true;
  285. Chat.contactId = instance.currentUser.userId;
  286. instance.profileDetails('personal');
  287. });
  288. }
  289. autoAdjustMsgInputHeight() {
  290. const msgInput = $('#input_msg_send_chatapp');
  291. msgInput.css('height', '0px');
  292. const height = Math.min(20 * 4, msgInput[0].scrollHeight);
  293. msgInput.css('height', `${height}px`);
  294. }
  295. loadchats() {
  296. const instance = this;
  297. let chathtml = instance._chatTemplate.getChatTemplate();
  298. $("#chatPanelBodyWrap").html(chathtml);
  299. $(".biz-settings-panel").css({ "background": "white" });
  300. $(".notification-footer").addClass("d-none");
  301. instance.load(0, '', null);
  302. instance.loadCssFiles();
  303. instance.loadJsFiles();
  304. instance.loadEmojiCategories();
  305. if (Chat.isFullScreen) {
  306. instance.loadChatFullScreen();
  307. }
  308. Chat.routes = [];
  309. Chat.routes.push('chat-list');
  310. }
  311. loadJsFiles() {
  312. var jsfiles = Unibase.Platform.Connect.Components.Chat.Instance().jsFiles();
  313. Unibase.Platform.Helpers.FileCacheHelper.Instance().loadJsFiles(jsfiles, function () {
  314. Unibase.Platform.Connect.Components.Chat.Instance().getDefaultContacts();
  315. Unibase.Platform.Connect.Components.Chat.Instance().getRecentChats();
  316. });
  317. }
  318. getContactInfo(contactId = 0, ChatGroupId = 0) {
  319. var filter = ChatGroupId == 0 ? "contactId" : "chatGroupId";
  320. var filterValue = ChatGroupId == 0 ? contactId : ChatGroupId;
  321. var contacts = Chat.recentChats.find(x => x[filter] == filterValue);
  322. if (contacts == undefined) {
  323. contacts = Chat.contacts.find(x => x.contactId == contactId);
  324. }
  325. return contacts;
  326. }
  327. getDefaultContacts() {
  328. this._chatmanager.getChatContacts().then(function (response) {
  329. if (response.result != null && response.result.length > 0) {
  330. Chat.contacts = response.result;
  331. var countlength = Chat.contacts.length;
  332. var chatsplit = countlength % 4;
  333. while (true) {
  334. if (chatsplit != 0) {
  335. countlength = countlength - 1;
  336. chatsplit = countlength % 4;
  337. }
  338. if (chatsplit == 0) {
  339. break;
  340. }
  341. }
  342. Chat.contactsCount = countlength / 4;
  343. }
  344. });
  345. }
  346. getAppUrl() {
  347. if (Chat.appUrl == '') {
  348. Chat.appUrl = _appsettings.server_url();
  349. if (_appsettings.asset_url() != undefined && _appsettings.asset_url() != null && _appsettings.asset_url() != '') {
  350. Chat.appUrl = _appsettings.asset_url();
  351. }
  352. }
  353. return Chat.appUrl;
  354. }
  355. getContacts(term = "") {
  356. var contacts = Chat.contacts;
  357. if (term != "") {
  358. contacts = contacts.filter(x => x.contactName.toLowerCase().includes(term.toLowerCase()));
  359. }
  360. return contacts;
  361. }
  362. muteAlert() {
  363. var contactInfo = Chat.Instance().getContactInfo(Chat.contactId, Chat.chatGroupId);
  364. var text = contactInfo.isMute ? "Unmute " : "Mute ";
  365. Chat.Instance().chatPopup({
  366. message: text + contactInfo.contactName + " ?",
  367. buttons: {
  368. confirm: {
  369. label: text
  370. },
  371. cancel: {
  372. label: 'Cancel'
  373. }
  374. },
  375. callback: (result) => {
  376. if (result) {
  377. Unibase.Platform.Connect.Managers.ChatManager.Instance().MuteNotifications(Chat.chatGroupId).then(function (response) {
  378. if (response.status == Unibase.Data.Status.Success) {
  379. Chat.recentChats.find(x => x.contactId == Chat.contactId).isMute = response.result.isMute;
  380. var muteText = response.result.isMute ? "Unmute" : "Mute";
  381. $('.mute-option').text(muteText);
  382. if (response.result.isMute) {
  383. $(`.userChat_${Chat.chatGroupId} .mute-status-icon`).removeClass('hidden');
  384. }
  385. else {
  386. $(`.userChat_${Chat.chatGroupId} .mute-status-icon`).addClass('hidden');
  387. }
  388. }
  389. });
  390. }
  391. }
  392. });
  393. }
  394. loadCssFiles() {
  395. var csssfiles = Unibase.Platform.Connect.Components.Chat.Instance().cssFiles();
  396. Unibase.Platform.Helpers.FileCacheHelper.Instance().loadCssFiles(csssfiles, function () {
  397. });
  398. }
  399. Displaycontacts() {
  400. $('#chatHeaderNavTabs .active').removeClass('active');
  401. $('._btnDisplayUser').addClass('active');
  402. $('#txtSearchContacts').val("");
  403. $('.contacts_more').text(0);
  404. $(".chatapp-users-list").addClass("hidden");
  405. $(".div_ContactsList").removeClass("hidden");
  406. Chat.chatGroupId = 0;
  407. Chat.chatwindow = false;
  408. Chat.privatewindow = false;
  409. Chat.profiledetailswindow = false;
  410. $('.list-chat-contacts').html('');
  411. if ($.inArray('contact-list', Chat.routes) === -1) {
  412. Chat.routes.push('contact-list');
  413. }
  414. $('#txtSearchChats').val('');
  415. Unibase.Platform.Connect.Components.Chat.Instance().loadContacts();
  416. }
  417. loadContacts(IsSearch = false) {
  418. const instance = this;
  419. let term = $("#txtSearchContacts").val().toString().trim();
  420. var contacts = Chat.Instance().getContacts(term);
  421. var indexlength = 0;
  422. if (IsSearch) {
  423. $('.list-chat-contacts').html('');
  424. $('.contacts_more').text(0);
  425. }
  426. if (term != "") {
  427. $('.contacts-morebtn').addClass('d-none');
  428. }
  429. else {
  430. contacts = $.extend(true, [], contacts);
  431. var count = Number($('.contacts_more').text());
  432. if (Chat.contacts.length < 20) {
  433. Chat.contactsCount = Chat.contacts.length;
  434. }
  435. contacts = contacts.splice(count, Chat.contactsCount);
  436. $('.contacts_more').text(count + Chat.contactsCount);
  437. if (Chat.contacts.length <= Number($('.contacts_more').text())) {
  438. $('.contacts-morebtn').addClass('d-none');
  439. }
  440. else {
  441. $('.contacts-morebtn').removeClass('d-none');
  442. }
  443. indexlength = $('.first-letter-heading').length;
  444. }
  445. var html = instance._chatTemplate.getContactsTemplate(contacts);
  446. (IsSearch) ? $('.list-chat-contacts').html(html) : $('.list-chat-contacts').append(html);
  447. if (indexlength != 0) {
  448. var firstLetter = $('.first-letter-heading').get(indexlength - 1).innerText;
  449. var lastLetter = $('.first-letter-heading').get(indexlength).innerText;
  450. (firstLetter == lastLetter) ? $('.first-letter-heading').get(indexlength).remove() : '';
  451. }
  452. }
  453. makeACall() {
  454. $('#chatHeaderNavTabs .active').removeClass('active');
  455. $('._btnmakeacall').addClass('active');
  456. $('.div-chat-search').addClass('hidden');
  457. $(".list-chat-contacts,.list-groupchat").html('').append('<li class="d-flex align-items-center justify-content-center mt-4">No calls Found</li>');
  458. Chat.chatGroupId = 0;
  459. }
  460. multiaction() {
  461. var c = 1;
  462. for (var i = 0; i < c; i++) {
  463. if (!$('.more_msg').hasClass('d-none')) {
  464. $('.morediv').trigger('click');
  465. c++;
  466. }
  467. }
  468. $('.msg-check').removeClass('hidden');
  469. $('.message-body').not('.deleted-msg-body').find('.msg-check').removeClass('hidden');
  470. $('.msg-multiaction-btns').removeClass('hidden');
  471. $('.msg-input-wrap').addClass('hidden').removeClass('d-flex');
  472. $('#selectedMsgsCountHeader').removeClass('hidden');
  473. $('#chatMsgHeader').addClass('hidden');
  474. $('.chatoptions-wrapper').addClass('hidden');
  475. $(".selected-msgs-count").html(`${Chat.MultiSelect.length}`);
  476. }
  477. multiselect(event) {
  478. var id = $(event).attr("id");
  479. var chatid = id.split("_")[1];
  480. if ($(event).is(":checked")) {
  481. !Chat.MultiSelect.find(x => x == chatid) ? Chat.MultiSelect.push(chatid) : "";
  482. }
  483. else {
  484. Chat.MultiSelect = Chat.MultiSelect.filter(x => x != chatid);
  485. }
  486. $(".selected-msgs-count").html(`${Chat.MultiSelect.length}`);
  487. if (Chat.MultiSelect.length != 0) {
  488. $('.footer-multiaction').removeClass('disabled');
  489. }
  490. else {
  491. $('.footer-multiaction').addClass('disabled');
  492. }
  493. var a = Chat.chatlistarray.filter(x => x.fileName != null).map(y => y.chatId);
  494. var common = $.grep(a, function (element) {
  495. return $.inArray(element, Chat.MultiSelect) !== -1;
  496. });
  497. if (common.length != 0) {
  498. $('#copyicon').addClass('disabled');
  499. $('.star-icon').addClass('disabled');
  500. }
  501. else {
  502. if (Chat.MultiSelect.length != 0) {
  503. $('#copyicon').removeClass('disabled');
  504. $('.star-icon').removeClass('disabled');
  505. }
  506. }
  507. var b = Chat.chatlistarray.filter(x => x.isDelete).map(y => y.chatId);
  508. var common1 = $.grep(b, function (element) {
  509. return $.inArray(element, Chat.MultiSelect) !== -1;
  510. });
  511. if (common1.length != 0) {
  512. $('.footer-multiaction').addClass('disabled');
  513. $('.delete-icon').removeClass('disabled');
  514. }
  515. }
  516. MultiDelete() {
  517. const instance = this;
  518. instance.chatPopup({
  519. message: "Are you sure you want to delete?",
  520. buttons: {
  521. confirm: {
  522. label: 'Delete'
  523. },
  524. cancel: {
  525. label: 'Cancel'
  526. }
  527. },
  528. callback: function (result) {
  529. if (result) {
  530. var messages = Chat.MultiSelect;
  531. var data = { messages };
  532. instance._chatmanager.Deletemultiple(data).then(function (response) {
  533. if (response.status == Unibase.Data.Status.Success) {
  534. for (let i = 0; i < Chat.MultiSelect.length; i++) {
  535. $('.chat-messages_' + Chat.MultiSelect[i]).remove();
  536. }
  537. Chat.MultiSelect = [];
  538. }
  539. });
  540. }
  541. }
  542. });
  543. }
  544. multiplestar() {
  545. var Messages = Chat.MultiSelect;
  546. var data = { Messages };
  547. this._chatmanager.Starmultiple(data).then(function (response) {
  548. if (response.status == Unibase.Data.Status.Success) {
  549. for (let i = 0; i < Chat.MultiSelect.length; i++) {
  550. var result = response.result.find(x => x.chatId = Chat.MultiSelect[i]);
  551. Chat.chatlistarray[Chat.chatlistarray.findIndex(x => x.chatId == result.chatId)] = result;
  552. Chat.Instance().starMessageTemplate(result.chatId);
  553. }
  554. Chat.MultiSelect = [];
  555. }
  556. });
  557. }
  558. multiplecopy() {
  559. var messages = "";
  560. var msgarray = Chat.MultiSelect;
  561. for (var i = 0; i < msgarray.length; i++) {
  562. var msg = Chat.chatlistarray.find(x => x.chatId == msgarray[i]).message;
  563. messages += msg + '\n';
  564. }
  565. var textArea = document.createElement("textarea");
  566. textArea.value = messages;
  567. document.body.appendChild(textArea);
  568. textArea.select();
  569. document.execCommand("Copy");
  570. textArea.remove();
  571. Chat.MultiSelect = [];
  572. }
  573. BlockAlert() {
  574. var contactinfo = Chat.Instance().getContactInfo(Chat.contactId, 0);
  575. var text = Chat.isBlock ? "Unblock " + contactinfo.contactName + " to send message." : "Block " + contactinfo.contactName + " ?";
  576. Chat.Instance().chatPopup({
  577. message: text,
  578. buttons: {
  579. confirm: {
  580. label: Chat.isBlock ? "Unblock" : "Block"
  581. },
  582. cancel: {
  583. label: 'Cancel'
  584. }
  585. },
  586. callback: (result) => {
  587. if (result) {
  588. Unibase.Platform.Connect.Managers.ChatManager.Instance().blockOrunBlock(Chat.chatGroupId).then(function (response) {
  589. if (response.result != null) {
  590. Chat.isBlock = response.result.isBlock;
  591. Chat.recentChats.find(x => x.contactId == Chat.contactId).isBlock = Chat.isBlock;
  592. var blocktext = "Unblock";
  593. var successText = "User Blocked";
  594. if (!Chat.isBlock) {
  595. blocktext = "Block";
  596. successText = "User Unblocked";
  597. var reflastseen = Chat.recentChats.find(x => x.chatGroupId == Chat.chatGroupId).lastSeen;
  598. var lastseen = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocal(reflastseen);
  599. if (lastseen != "Invalid date") {
  600. $('.lastseen' + Chat.contactId).text(lastseen);
  601. $('.lastseen_' + Chat.contactId).attr('data-lastseen', reflastseen);
  602. }
  603. }
  604. else {
  605. $('.lastseen_' + Chat.contactId).text('');
  606. }
  607. MessageHelper.Instance().showSuccess(successText, '');
  608. $('.blkbtn-text').text(blocktext + "User");
  609. }
  610. else {
  611. alert("Failed to update");
  612. }
  613. });
  614. }
  615. }
  616. });
  617. }
  618. profileheader() {
  619. var profileheaderhtml = Chat.Instance()._chatTemplate.getprofileheader();
  620. $('#profileHeader').html(profileheaderhtml);
  621. }
  622. privatewindow(id) {
  623. return __awaiter(this, void 0, void 0, function* () {
  624. var contactElement = $(`#msgConvoItem_${id}`);
  625. Chat.contactId = +$(contactElement).attr("data-contactid");
  626. Chat.chatGroupId = +$(contactElement).attr("data-chatgroupid");
  627. var contactInfo = Chat.Instance().getContactInfo(Chat.contactId, Chat.chatGroupId);
  628. Chat.chatGroupId = contactInfo.chatGroupId;
  629. Chat.contactId = contactInfo.contactId;
  630. Chat.isPrivate = contactInfo.isPrivate;
  631. Chat.isBlock = contactInfo.isBlock;
  632. var unreadcount = Number(contactInfo.unReadMessagesCount);
  633. if (unreadcount > 0) {
  634. Chat.recentChats.find(x => x.chatGroupId == Chat.chatGroupId).unReadMessagesCount = 0;
  635. }
  636. var badgecount = Number($('#chatIconBadge').text()) - unreadcount;
  637. $('#chatIconBadge').text(badgecount);
  638. $('.unread_messages_' + Chat.chatGroupId).remove();
  639. if (badgecount <= 0) {
  640. $('#chatIconBadge').addClass('d-none').text(0);
  641. }
  642. const headerhtml = Chat.instance._chatTemplate.getPrivateWindowTemplate(contactInfo);
  643. $('#chatMsgHeader').html(headerhtml);
  644. if (Chat.chatGroupId != 0) {
  645. Chat.Instance().loadTyping(Chat.chatGroupId);
  646. }
  647. var muteText = contactInfo.isMute ? "Unmute" : "Mute";
  648. $('.mute-option').text(muteText);
  649. $('.messageslist').html('');
  650. Unibase.Platform.Connect.Components.Chat.chatlistarray = [];
  651. Chat.chatwindow = false;
  652. Chat.privatewindow = true;
  653. Chat.profiledetailswindow = false;
  654. $('.lastseen_' + Chat.contactId).text('');
  655. $('.morediv').attr("data-isfirst", 'true');
  656. $('.morediv').attr("data-moreindex", '0');
  657. $('.more_msg').addClass('d-none');
  658. $('#chatEmojiIcon').removeClass('d-none');
  659. if (!Chat.isFullScreen) {
  660. $('#chatConvoBody').removeClass('hidden');
  661. $('#chatsContactsSection').addClass('hidden');
  662. $('.chat_down').css('left', '88%');
  663. }
  664. else {
  665. this.highlightActiveChat();
  666. $('#chatMsgHeader,.msg-input-wrap').removeClass('hidden');
  667. $('.msg-input-wrap').addClass('d-flex');
  668. $('#selectedMsgsCountHeader,.msg-multiaction-btns').addClass('hidden');
  669. $('#chatTypingMsg').html('');
  670. $('#closePrivateWindowBtn').addClass('hidden');
  671. $('#fullScreenModal').modal('hide');
  672. $('#chatNoConvoMsgWrap').addClass('hidden');
  673. $('#chatConvoBody').removeClass('hidden');
  674. $('.chat_down').css('left', '98%');
  675. }
  676. Chat.routes.push('private-window');
  677. if (isMobileApp()) {
  678. $('#chatEmojiIcon').addClass('d-none');
  679. }
  680. yield Unibase.Platform.Connect.Managers.ChatManager.Instance().getChatsByGroupId(Chat.chatGroupId).then(function (response) {
  681. if (response.result != null && response.result.length > 0) {
  682. Unibase.Platform.Connect.Components.Chat.chatlistarray = response.result;
  683. if (contactInfo.draftMessage != "" && contactInfo.draftMessage != null && contactInfo.draftMessage != "null") {
  684. var draftmessage = JSON.parse(contactInfo.draftMessage);
  685. if (draftmessage.quote != undefined) {
  686. Chat.Instance().quoteMessage(draftmessage.quote);
  687. }
  688. $('#input_msg_send_chatapp').val(draftmessage.message);
  689. $('#icon_send').removeClass('hidden');
  690. $('#recordaudio').addClass('hidden');
  691. }
  692. Chat.Instance().LoadMessages();
  693. }
  694. });
  695. if (!contactInfo.isPrivate) {
  696. if (Chat.isBlock) {
  697. $('#chatFooter').addClass('hidden');
  698. $('.remove_template').removeClass('hidden');
  699. return;
  700. }
  701. else {
  702. Unibase.Platform.Connect.Managers.ChatManager.Instance().getChatRecipientsByGroupId(Chat.chatGroupId).then(function (response) {
  703. if (response.result != null && response.result.length > 0) {
  704. Chat.grpdetails = response.result.filter(x => x.isBlock == false);
  705. $('.lastseen_' + Chat.contactId).text(Chat.grpdetails.length + ' ' + 'Participants');
  706. }
  707. });
  708. }
  709. }
  710. else {
  711. if (!Chat.isBlock) {
  712. Chat.Instance().updatestatus();
  713. if (contactInfo.lastSeen != null && contactInfo.lastSeen != "null" && contactInfo.lastSeen != "" && contactInfo.lastSeen != undefined) {
  714. var date = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocal(contactInfo.lastSeen);
  715. var onlineIndex = Chat.connectedusers.findIndex(x => x == Chat.contactId);
  716. if (onlineIndex == -1)
  717. $('.lastseen_' + Chat.contactId).text(date);
  718. setInterval(Chat.Instance().refreshlastseen, 60000);
  719. }
  720. }
  721. }
  722. $('.remove_template').addClass('hidden');
  723. $('#chatFooter').removeClass('hidden');
  724. let _packet = new Unibase.Platform.Connect.Server.Packets.Connect();
  725. _packet.UserId = Chat.currentUser.userId;
  726. _packet.UserName = Chat.currentUser.name;
  727. _packet.ActiveChatGroupId = Chat.chatGroupId;
  728. _packet.SessionId = Chat.currentUser.sessionId;
  729. _packet.UnibaseId = Chat.currentUser.unibaseId;
  730. Unibase.Platform.Connect.Components.Chat.instance._chatter.updateActiveChatGroup(_packet, null);
  731. $('.chat_down').addClass('hidden');
  732. $('#input_msg_send_chatapp').focus();
  733. $('.simplebar-content-wrapper').scroll(function () {
  734. Chat.Instance().showchatdownicon();
  735. });
  736. });
  737. }
  738. LoadMessages() {
  739. if (Chat.chatlistarray.length > 0) {
  740. var index = Number($('.morediv').attr("data-moreindex"));
  741. var isFirst = ($('.morediv').attr('data-isfirst') === 'true');
  742. if (index == 0 && isFirst) {
  743. Chat.chatlistarray.sort((a, b) => a.messageSentDate > b.messageSentDate ? 1 : -1);
  744. index = Chat.chatlistarray.length - 1;
  745. $('.morediv').attr("data-isfirst", 'false');
  746. }
  747. var refindex = index - 20;
  748. $('.morediv').attr("data-moreindex", refindex);
  749. if (Chat.chatlistarray.length <= 20) {
  750. $('.more_msg').addClass('d-none');
  751. }
  752. else {
  753. $('.more_msg').removeClass('d-none');
  754. }
  755. var dateArray = [];
  756. for (let j = 0; j < 20; j++) {
  757. var html = '';
  758. if (index < 0) {
  759. $('.more_msg').addClass('d-none');
  760. $('.morediv').attr("data-isfirst", 'true');
  761. $('.morediv').attr("data-moreindex", '0');
  762. break;
  763. }
  764. var messageDate = moment.utc(Chat.chatlistarray[index].messageSentDate).format('MM-DD-YYYY');
  765. var dateindex = dateArray.findIndex(x => x == messageDate);
  766. if (dateindex == -1) {
  767. dateArray.push(messageDate);
  768. }
  769. html = Chat.Instance().loadconversation(Chat.chatlistarray[index]);
  770. index--;
  771. $('.messageslist').prepend(html);
  772. }
  773. for (let i = 0; i < dateArray.length; i++) {
  774. var getdatehtml = Chat.Instance().getMessageDate(dateArray[i]);
  775. if ($('#date_' + dateArray[i]).length != 0) {
  776. $('#date_' + dateArray[i]).remove();
  777. }
  778. $('.dateli_' + dateArray[i] + ':eq(0)').before(getdatehtml);
  779. }
  780. let lastelement = $('.date').first();
  781. if (isFirst) {
  782. lastelement = $('.chat-message-wrap').last();
  783. }
  784. if (lastelement[0] != undefined)
  785. lastelement[0].scrollIntoView();
  786. }
  787. }
  788. getMessageDate(messageDate) {
  789. var _datehelper = Unibase.Platform.Helpers.DateTimeHelper.Instance();
  790. var date = new Date();
  791. var d = messageDate.replace(/-/g, '/');
  792. var messageDateformat = _datehelper.formatLocalDateFirst(d);
  793. var today = _datehelper.formatLocalDateFirst(date);
  794. var yesterDay = _datehelper.formatLocalDateFirst(date.setDate(date.getDate() - 1));
  795. var senddate = (messageDateformat == today) ? senddate = "Today" : (messageDateformat == yesterDay) ? senddate = "Yesterday" : senddate = messageDateformat;
  796. return '<div class="date" id="date_' + messageDate + '">' + senddate + '</div>';
  797. }
  798. loadconversation(chatList, isNewMessage = false) {
  799. var hideinfo = '';
  800. const instance = this;
  801. var msghtml = "";
  802. let _userid = Chat.currentUser.userId;
  803. var msg;
  804. var messagealert;
  805. var lihtml;
  806. var showmsgstatus = "";
  807. var messageDate = moment.utc(chatList.messageSentDate).format('MM-DD-YYYY');
  808. var messageLength = isNewMessage ? $('.chat-message-wrap').length - 1 : 0;
  809. var preElement = $('.chat-message-wrap:eq(' + messageLength + ')');
  810. var previousDivDate = preElement.attr('data-MessageDate');
  811. var previousDivTime = preElement.attr('data-MessageTime');
  812. var localDate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDate(chatList.messageSentDate);
  813. var msgTime = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateTimeWithT(chatList.messageSentDate);
  814. msgTime = msgTime.replace(localDate, "");
  815. var prevFromUserName = preElement.attr('data-fromusername');
  816. var showfromuser = "";
  817. if (chatList.fromUserName == prevFromUserName && !Chat.isPrivate) {
  818. if (!isNewMessage) {
  819. preElement.find(".fromUserIdname").addClass('hidden');
  820. }
  821. else {
  822. showfromuser = "hidden";
  823. }
  824. }
  825. let isMsgTimeMatch = (msgTime == previousDivTime && previousDivDate == messageDate && prevFromUserName == chatList.fromUserName);
  826. if (isMsgTimeMatch && isNewMessage) {
  827. preElement.find('.time').addClass('hidden');
  828. isMsgTimeMatch = false;
  829. }
  830. const chatId = chatList.chatId;
  831. msg = chatList.message;
  832. if (msg.startsWith('*') && msg.endsWith('*')) {
  833. msg = msg.replaceAll('*', '');
  834. msg = '<b>' + msg + '</b>';
  835. }
  836. else if (msg.startsWith('_') && msg.endsWith('_')) {
  837. msg = msg.replaceAll('_', '');
  838. msg = '<i>' + msg + '</i>';
  839. }
  840. else if (msg.startsWith('~') && msg.endsWith('~')) {
  841. msg = msg.replaceAll('~', '');
  842. msg = '<strike>' + msg + '</strike>';
  843. }
  844. if (msg.includes('') || msg.includes('\n')) {
  845. msg = msg.replace(/ /g, '&nbsp').replaceAll(/\n/g, '<br>');
  846. }
  847. if ($.trim(msg).length > 400) {
  848. var fullmsg = msg;
  849. msg = fullmsg.substring(0, 400);
  850. var remainmsg = fullmsg.substring(400, $.trim(fullmsg).length);
  851. msg = msg + '<span class="doted_' + chatId + '">....</span><span class="read-more_' + chatId + ' cursor-pointer" data-chatid=' + chatId + ' style="color:#00B0FF" onclick="Unibase.Platform.Connect.Components.Chat.Instance().readmore(\'' + chatId + '\')">Read more</span><span class="remain-data_' + chatId + ' hidden">' + remainmsg + '</span>';
  852. }
  853. if (chatList.groupMessageType != 0) {
  854. msghtml += Unibase.Platform.Connect.Components.Chat.Instance().groupdefaultmessages(chatList);
  855. return msghtml;
  856. }
  857. if (chatList.isDelete) {
  858. showmsgstatus = "hidden";
  859. if (_userid == chatList.fromUserId) {
  860. messagealert = "You deleted this message";
  861. }
  862. else {
  863. messagealert = "This message was deleted";
  864. }
  865. msg = '<span class="delete-msg"><i>' + messagealert + '</i><span class="btn btn-icon btn-icon-circle btn-icon-style-2 btn-soft-danger d-20 ml-1 cursor-pointer del-icon" onclick="Unibase.Platform.Connect.Components.Chat.Instance().deleteMessage(\'' + chatId + '\')"><span class="btn-icon-wrap"><i class="las la-trash-alt font-14"></i></span></span></span>';
  866. fileimagepath = msg;
  867. }
  868. if (chatList.messageType == Unibase.Platform.Connect.Enums.MessageType.Url && !chatList.isDelete) {
  869. msg = '<a href="' + msg + '" target="_blank">' + msg + '</a>';
  870. }
  871. if (chatList.quotedMessage != null) {
  872. msg = Unibase.Platform.Connect.Components.Chat.Instance().quotetemplate(chatList);
  873. }
  874. if (chatList.isEdit && !chatList.isDelete) {
  875. msg = `<span class="chat-editmsg">${msg}</span><span class="btn btn-icon btn-primary btn-icon-circle btn-xs d-20 ml-10 cursor-default edit-msg-icon"><span class="btn-icon-wrap"><i class="las la-pencil-alt"></i></span></span>`;
  876. }
  877. var forward = '<li class="forward"><a class="dropdown-item" href = "javascript:void(0);" onclick="Unibase.Platform.Connect.Components.Chat.Instance().forwardDesign(\'' + chatId + '\') ">Forward</a></li>';
  878. var quote = '<li class="quote"><a class="dropdown-item" href="javascript:void(0);" onclick="Unibase.Platform.Connect.Components.Chat.Instance().quoteMessage(\'' + chatId + '\')";>Quote</a></li>';
  879. var edit = '<li class="edit"><a class="dropdown-item" href ="javascript:void(0);" onclick="Unibase.Platform.Connect.Components.Chat.Instance().editMessage(\'' + chatId + '\')";>Edit</a></li>';
  880. var copy = '<li class="copy"><a class="dropdown-item" href="javascript:void(0);" onclick="Unibase.Platform.Connect.Components.Chat.Instance().copyMessage(\'' + chatId + '\')";>Copy</a></li>';
  881. var deletemsg = '<li class="delete"><a class="dropdown-item" href="javascript:void(0);" onclick="Unibase.Platform.Connect.Components.Chat.Instance().deleteMessage(\'' + chatId + '\')"><span>Delete</span></a></li>';
  882. var starmessage = '<li class="star"><a class="dropdown-item" id="unstar" href="javascript:void(0);" onclick="Unibase.Platform.Connect.Components.Chat.Instance().StarMessage(\'' + chatId + '\')";>Star message</a></li>';
  883. var RemoveStarmessage = '<li class="unstar"><a class="dropdown-item" id="unstar" href="javascript:void(0);" onclick="Unibase.Platform.Connect.Components.Chat.Instance().StarMessage(\'' + chatId + '\')";>Unstar message</a></li>';
  884. var deleteforeveryone = '<li class="deleteforeveryone"><a class="dropdown-item" href="javascript:void(0);" onclick="Unibase.Platform.Connect.Components.Chat.Instance().deleteForEveryone(\'' + chatId + '\')"><span>Delete for everyone</span></a></li>';
  885. var fromUserIdhtml = "";
  886. var starmsg = starmessage;
  887. let isStarMsg = false;
  888. if (!chatList.isDelete) {
  889. if (chatList.isStared == null) {
  890. chatList.isStared = "";
  891. }
  892. if (chatList.isStared.includes(_userid)) {
  893. isStarMsg = true;
  894. starmsg = RemoveStarmessage;
  895. msg = `<span>${msg}</span><a href="javascript:;" class="btn btn-icon btn-icon-circle btn-primary btn-xs d-20 star-msg-icon"><span class="btn-icon-wrap"><i class="icon dripicons-star"></i></span></a>`;
  896. }
  897. }
  898. if (Chat.isPrivate) {
  899. showfromuser = "hidden";
  900. }
  901. if (chatList.fromUserName != Chat.currentUser.name) {
  902. fromUserIdhtml = '<span><span class="fromUserIdname ' + showfromuser + ' font-10" style="color:#dd6767">' + chatList.fromUserName + '<hr class="ma-0 mb-5"></span><span class="message">' + msg + '</span></span>';
  903. if (chatList.filePath != null) {
  904. fromUserIdhtml = '<span><span class="fromUserIdname ' + showfromuser + ' font-10" style="color:#dd6767">' + chatList.fromUserName + '<hr class="ma-0 mb-5"></span></span>';
  905. }
  906. }
  907. const showMsgTime = isMsgTimeMatch ? 'hidden' : '';
  908. var liclassList = (chatList.fromUserId == Chat.currentUser.userId) ? "fromuserlist" : "touserist";
  909. if (chatList.filePath != null) {
  910. var audiovoice = '<audio controls="" style="width: 250px;"><source src="' + chatList.filePath + '" type="audio/webm"></audio>';
  911. const fileNameWithType = chatList.fileName;
  912. const fileName = fileNameWithType.split('.').slice(0, -1).join('.');
  913. const fileType = chatList.fileType.split('/').pop();
  914. var fileimagepath;
  915. var imagepath = [];
  916. let imgClass = '';
  917. var filepath = Chat.Instance().GetFilePath(chatList.filePath);
  918. msg = (msg == "null") ? "" : '<div class="message">' + msg + '</div>';
  919. let audioplayBtnHtml = '';
  920. imagepath[0] = "" + filepath + "";
  921. var download = "Unibase.Platform.Connect.Components.Chat.Instance().downloadfile(\'" + imagepath[0] + "'\,'" + chatId + "')";
  922. var preview = "Unibase.Platform.Connect.Components.Chat.Instance().filePreview(\'" + imagepath[0] + "'\)";
  923. if (chatList.fileType.match('image.*')) {
  924. fileimagepath = Chat.Instance().getFilePath(filepath);
  925. imagepath[1] = "" + fileimagepath + "";
  926. }
  927. else {
  928. if (chatList.fileType.match('audio.*')) {
  929. imgClass = 'audio-thumb-img';
  930. audioplayBtnHtml = `<span class="msg-play-btn"><a href="javascript:;" class="btn btn-icon btn-icon-circle btn-primary btn-xs btn-rounded mr-5" onclick=${preview}><span class="btn-icon-wrap"><i class="las la-play font-18"></i></span></a></span>`;
  931. }
  932. if (chatList.fileType.includes('audio') || chatList.fileType.includes('video')) {
  933. fileimagepath = Unibase.Platform.Connect.Components.Chat.Instance().getfileThumbnail(chatList.fileType);
  934. }
  935. else {
  936. fileimagepath = Unibase.Platform.Connect.Components.Chat.Instance().getfileThumbnail(chatList.fileName.substring(chatList.fileName.lastIndexOf('.') + 1));
  937. }
  938. }
  939. msghtml += '<li class="chat-messages_' + chatId + ' chat-message-wrap dateli_' + messageDate + ' ' + liclassList + '" data-chatid=' + chatId + ' data-isTimeMatch=' + isMsgTimeMatch + ' data-MessageDate=' + messageDate + ' data-MessageTime="' + msgTime + '" data-fromusername="' + chatList.fromUserName + '"><div class="messagemedia-body">';
  940. if (_userid == chatList.fromUserId) {
  941. if (chatList.messageDeliveredDate != null) {
  942. if (chatList.messageReadDate != null) {
  943. k = '<span class="msg-status msg_status ' + showmsgstatus + '"><i class="zmdi zmdi-check-all"></i></span>';
  944. }
  945. else {
  946. k = '<span class="msg-status-delivery msg_status ' + showmsgstatus + '"><i class="zmdi zmdi-check-all"></i></span>';
  947. }
  948. if (chatList.fileName.indexOf('voicemsg') != -1) {
  949. msghtml += '<div class="sent-messages"><div class="message-div"><div class="single-message"><div class="msg-check hidden"><input type="checkbox" onclick="Unibase.Platform.Connect.Components.Chat.Instance().multiselect(this)" id="msg-select_' + chatList.chatId + '" class="message-checkbox" value="' + chatList.chatId + '" name="selected_messages" ></div><div class="message-wrapper" id="msg-action" ondblclick="Unibase.Platform.Connect.Components.Chat.Instance().multiaction()"><span class="message-span flex-grow-1">' + audiovoice + '</span>';
  950. }
  951. else {
  952. msghtml += '<div class="sent-messages"><div class="message-div"><div class="single-message"><div class="msg-check hidden"><input type="checkbox" onclick="Unibase.Platform.Connect.Components.Chat.Instance().multiselect(this)" id="msg-select_' + chatList.chatId + '" class="message-checkbox" value="' + chatList.chatId + '" name="selected_messages" ></div><div class="message-wrapper" id="msg-action" ondblclick="Unibase.Platform.Connect.Components.Chat.Instance().multiaction()">' + audioplayBtnHtml + '<span class="message-span flex-grow-1"><a class="download_img_preview" href="javascript:void(0);" onclick="' + preview + '"><img class="thumb_file loadimg img-fluid "' + imgClass + '" id = "loadedFiles_"' + chatId + '" onerror="ReloadImage(event)" src="' + fileimagepath + '" title="' + fileNameWithType + '" data-dynamic="1"></a><div class="file_name d-flex align-items-center font-10" style="width:90px" title="' + fileNameWithType + '"><span class="text-truncate">' + fileName + '</span><span class="flex-shrink-0 text-truncate w-30">.' + fileType + '</span></div></span><span class="message-download"><a class="btn btn-icon btn-icon-circle btn-rounded btn-outline-teal download-btn btn-xs ml-10 downloadfiles_'
  953. + chatId + '"href = "javascript:void(0);" download><span class="btn-icon-wrap"><i class="las la-download font-18" onclick = "' + download + '"></i></span></a></span>';
  954. }
  955. msghtml += `<div class="flex-between-center flex-basis-100 c-gap-10 border-top" style="margin-top:2px;padding-top:2px;">${msg}${k}</div>`;
  956. hideinfo = '';
  957. }
  958. else {
  959. if (chatList.fileName.indexOf('voicemsg') != -1) {
  960. msghtml += '<div class="sent-messages"><div class="message-div"><div class="single-message"><div class="msg-check hidden"><input type="checkbox" onclick="Unibase.Platform.Connect.Components.Chat.Instance().multiselect(this)" id="msg-select_' + chatList.chatId + '" class="message-checkbox" value="' + chatList.chatId + '" name="selected_messages" ></div><div class="message-wrapper" id="msg-action" ondblclick="Unibase.Platform.Connect.Components.Chat.Instance().multiaction()"><span class="message-span flex-grow-1">' + audiovoice + '</span><div class="flex-between-center flex-basis-100 c-gap-10 border-top" style="margin-top:2px;padding-top:2px;"><span class="msg-status msg_status ' + showmsgstatus + '"><i class="zmdi zmdi-check"></i></span></div>';
  961. }
  962. else {
  963. msghtml += '<div class="sent-messages"><div class="message-div"><div class="single-message"><div class="msg-check hidden"><input type="checkbox" onclick="Unibase.Platform.Connect.Components.Chat.Instance().multiselect(this)" id="msg-select_' + chatList.chatId + '" class="message-checkbox" value="' + chatList.chatId + '" name="selected_messages" ></div><div class="message-wrapper" id="msg-action" ondblclick="Unibase.Platform.Connect.Components.Chat.Instance().multiaction()">' + audioplayBtnHtml + '<span class="message-span flex-grow-1"><a class="download_img_preview" href="javascript:void(0);" onclick="' + preview + '"><img class="thumb_file loadimg img-fluid' + imgClass + '" id = "loadedFiles_' + chatId + '" onerror="ReloadImage(event)" src="' + fileimagepath + '" title="' + fileNameWithType + '" data-dynamic="1"></a><div class="file_name d-flex align-items-center font-10" style="width:90px" title="' + fileNameWithType + '"><span class="text-truncate">' + fileName + '</span><span class="flex-shrink-0 text-truncate w-30">.' + fileType + '</span></div></span><span class="message-download"><a class="btn btn-icon btn-icon-circle btn-rounded btn-outline-teal download-btn btn-xs ml-10 downloadfiles_' + chatId + '"href = "javascript:void(0);" download><span class="btn-icon-wrap"><i class="las la-download font-18" onclick = "' + download + '"></i></span></a></span><div class="flex-between-center flex-basis-100 c-gap-10 border-top" style="margin-top:2px;padding-top:2px;"> ' + msg + '<span class="msg-status msg_status ' + showmsgstatus + '"><i class="zmdi zmdi-check"></i></span></div>';
  964. }
  965. Chat.isPrivate ? hideinfo = 'hidden' : hideinfo = '';
  966. }
  967. var info = '<li class="info ' + hideinfo + '"><a class="dropdown-item" href="javascript:void(0);" onclick="Unibase.Platform.Connect.Components.Chat.Instance().messageinfo(\'' + chatId + '\')"><span>Info</span></a></li>';
  968. lihtml = chatList.isDelete ? deletemsg : (forward + quote + deletemsg + deleteforeveryone + info);
  969. msghtml += `</div><div class="chatoptions-wrapper mr-10"><a class="chatoptions btn btn-flush-biz-theme btn-icon btn-rounded d-20 flush-soft-hover" href="javascript:void(0);" id="chatoptions" data-toggle="dropdown"><span class="btn-icon-wrap"><i class="icon dripicons-dots-3 chatoptions-icon text-dark"></i></span></a><ul class="dropdown-menu">${lihtml}</ul></div></div><div class="time ${showMsgTime}" data-msgtime='${msgTime}'>${msgTime}</div></div></div></div></li>`;
  970. }
  971. else if (chatList.toUserId != 0 || !Chat.isPrivate) {
  972. if (chatList.fileName.indexOf('voicemsg') != -1) {
  973. msghtml += '<div class="recived-messages"><div class="message-div"><div class="single-message"><div class="msg-check hidden"><input type="checkbox" onclick="Unibase.Platform.Connect.Components.Chat.Instance().multiselect(this)" id="msg-select_' + chatList.chatId + '" class="message-checkbox" value="' + chatList.chatId + '" name="selected_messages" ></div><div class="message-wrapper" id="msg-action" ondblclick="Unibase.Platform.Connect.Components.Chat.Instance().multiaction()"><span class="message-span flex-grow-1">' + fromUserIdhtml + audiovoice + '</span><div class="border-top" style="margin-top:2px;padding-top:2px;"></div>';
  974. }
  975. else {
  976. msghtml += '<div class="recived-messages"><div class="message-div"><div class="single-message"><div class="msg-check hidden"><input type="checkbox" onclick="Unibase.Platform.Connect.Components.Chat.Instance().multiselect(this)" id="msg-select_' + chatList.chatId + '" class="message-checkbox" value="' + chatList.chatId + '" name="selected_messages" ></div><div class="message-wrapper" id="msg-action" ondblclick="Unibase.Platform.Connect.Components.Chat.Instance().multiaction()">' + audioplayBtnHtml + '<span class="message-span flex-grow-1">' + fromUserIdhtml + '<a class="download_img_preview" href ="javascript:void(0);" onclick="' + preview + '"><img class="thumb_file loadimg img-fluid ' + imgClass + '" id="loadedFiles_' + chatId + '" src="' + fileimagepath + '" onerror="ReloadImage(event)" title="' + fileNameWithType + '" data-dynamic="1"></a><div class="file_name d-flex align-items-center font-10" style="width:90px" title="' + fileNameWithType + '"><span class="text-truncate">' + fileName + '</span><span class="flex-shrink-0 text-truncate w-30">.' + fileType + '</span></div></span><span class="message-download"><a class="btn btn-icon btn-icon-circle btn-rounded btn-outline-teal download-btn btn-xs ml-10 downloadfiles_' + chatId + '" href = "javascript:void(0);" download><span class="btn-icon-wrap"><i class="las la-download font-18" onclick="' + download + '"></i></span></a></span><div class="border-top" style="margin-top:2px;padding-top:2px;">' + msg + '</div>';
  977. }
  978. lihtml = chatList.isDelete ? deletemsg : (forward + deletemsg);
  979. msghtml += `</div><div class="chatoptions-wrapper ml-10"><a class="chatoptions btn btn-flush-biz-theme btn-icon btn-rounded d-20 flush-soft-hover" href="javascript:void(0);" id="chatoptions" data-toggle="dropdown"><span class="btn-icon-wrap"><i class="icon dripicons-dots-3 chatoptions-icon text-dark"></i></span></a><ul class="dropdown-menu">${lihtml}</ul></div></div><div class="time ${showMsgTime}" data-msgtime='${msgTime}'>${msgTime}</div></div></div></div></li>`;
  980. }
  981. }
  982. else {
  983. let emojiFontSize = instance.getEmojiFontSize(msg);
  984. msghtml += `<li class="chat-messages_${chatId} chat-message-wrap dateli_${messageDate} ${liclassList}" data-isTimeMatch=${isMsgTimeMatch} data-chatid='${chatId}' data-MessageTime='${msgTime}' data-MessageDate='${messageDate}' data-fromusername='${chatList.fromUserName}'><div class="message-body ${isMsgTimeMatch ? 'mb-5' : 'mb-10'} ${chatList.isDelete ? 'deleted-msg-body' : ''} ${isStarMsg ? 'star-msg-body' : ''}">`;
  985. if (_userid == chatList.fromUserId) {
  986. var k = "";
  987. if (chatList.messageDeliveredDate != null) {
  988. k = '<span class="msg-status-delivery ml-1 msg_status ' + showmsgstatus + '"><i class="zmdi zmdi-check-all"></i></span>';
  989. if (chatList.messageReadDate != null) {
  990. k = '<span class="msg-status msg_status ' + showmsgstatus + '"><i class="zmdi zmdi-check-all"></i></span>';
  991. }
  992. msghtml += '<div class="sent-messages"><div class="message-div"><div class="single-message"><div class="msg-check hidden"><input type="checkbox" onclick="Unibase.Platform.Connect.Components.Chat.Instance().multiselect(this)" id="msg-select_' + chatList.chatId + '" class="message-checkbox" value="' + chatList.chatId + '" name="selected_messages" ></div><div class="message-wrapper" id="msg-action" ondblclick="Unibase.Platform.Connect.Components.Chat.Instance().multiaction()"><span class="message-span" id="message_' + chatId + '"><span class="' + emojiFontSize + '">' + msg + '</span>' + k + '</span></div>';
  993. hideinfo = '';
  994. }
  995. else {
  996. msghtml += '<div class="sent-messages"><div class="message-div"><div class="single-message"><div class="msg-check hidden"><input type="checkbox" onclick="Unibase.Platform.Connect.Components.Chat.Instance().multiselect(this)" id="msg-select_' + chatList.chatId + '" class="message-checkbox" value="' + chatList.chatId + '" name="selected_messages"></div><div class="message-wrapper" id="msg-action" ondblclick="Unibase.Platform.Connect.Components.Chat.Instance().multiaction()"><span class="message-span ' + emojiFontSize + '" id="message_' + chatId + '">' + msg + '</span><span class="msg-status msg_status ' + showmsgstatus + '"><i class="zmdi zmdi-check"></i></span></div>';
  997. Chat.isPrivate ? hideinfo = 'hidden' : hideinfo = '';
  998. }
  999. var info = '<li class="info ' + hideinfo + '"><a class="dropdown-item" href="javascript:void(0);" onclick="Unibase.Platform.Connect.Components.Chat.Instance().messageinfo(\'' + chatId + '\')"><span>Info</span></a></li>';
  1000. lihtml = chatList.isDelete ? deletemsg : (forward + quote + edit + copy + deletemsg + deleteforeveryone + info + starmsg);
  1001. msghtml += `<div class="chatoptions-wrapper mr-10"><a class="chatoptions btn btn-flush-biz-theme btn-icon btn-rounded d-20 flush-soft-hover" href="javascript:void(0);" id="chatoptions" data-toggle="dropdown"><span class="btn-icon-wrap"><i class="icon dripicons-dots-3 chatoptions-icon text-dark"></i></span></a><ul class="dropdown-menu" id="drpdwn_${chatId}">${lihtml}</ul></div></div><div class="time ${showMsgTime}" data-msgtime='${msgTime}'>${msgTime}</div></div></div></div></li>`;
  1002. }
  1003. else if (chatList.toUserId != 0 || !Chat.isPrivate) {
  1004. let emojiFontSize = instance.getEmojiFontSize(msg);
  1005. msghtml += '<div class="recived-messages"><div class="message-div"><div class="single-message"><div class="msg-check hidden"><input type="checkbox" onclick="Unibase.Platform.Connect.Components.Chat.Instance().multiselect(this)" id="msg-select_' + chatList.chatId + '" class="message-checkbox" value="' + chatList.chatId + '" name="selected_messages"></div><div class="message-wrapper" id="msg-action" ondblclick="Unibase.Platform.Connect.Components.Chat.Instance().multiaction()"><span class="message-span ' + emojiFontSize + '" id="message_' + chatId + '">' + fromUserIdhtml + '</span></div>';
  1006. lihtml = chatList.isDelete ? deletemsg : (forward + quote + copy + deletemsg + starmsg);
  1007. msghtml += `<div class="chatoptions-wrapper ml-10"><a class="chatoptions btn btn-flush-biz-theme btn-icon btn-rounded d-20 flush-soft-hover" href="javascript:void(0);" id="chatoptions" data-toggle="dropdown"><span class="btn-icon-wrap"><i class="icon dripicons-dots-3 chatoptions-icon text-dark"></i></span></a><ul class="dropdown-menu" id="drpdwn_${chatId}">${lihtml}</ul></div></div><div class="time ${showMsgTime}" data-msgtime='${msgTime}'>${msgTime}</div></div></div></li></div></div>`;
  1008. }
  1009. $('.delete-msg').parent('.message-wrapper').css('background-color', '#fff1f1');
  1010. }
  1011. return msghtml;
  1012. }
  1013. messageinfo(chatid) {
  1014. const instance = this;
  1015. const html = instance._chatTemplate.getMsgInfoBodyHtml();
  1016. if (Chat.isFullScreen) {
  1017. $('#fullScreenModalContent').html(html);
  1018. $('#fullScreenModal').modal('show');
  1019. }
  1020. else {
  1021. $('#messageInfoSection').html(html).removeClass('hidden');
  1022. $('#chatConvoBody').addClass('hidden');
  1023. }
  1024. Unibase.Platform.Connect.Managers.ChatManager.Instance().messageinfo(chatid).then(function (response) {
  1025. if (response.status == Unibase.Data.Status.Success) {
  1026. $('#msgInfoTxt .msg-span').text(response.message);
  1027. if (Chat.isPrivate) {
  1028. $('.deliver').html('Delivered at');
  1029. $('.read').html('Read at');
  1030. if (response.result.messageDeliveredDate != null) {
  1031. var b = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime(response.result.messageDeliveredDate);
  1032. var ddate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateTimeWithT(b);
  1033. var html = `<li class="list-group-item px-1 py-2 flex-between-center position-relative delivered-user">
  1034. <a href="javascript:;" class="d-flex align-items-center c-gap-10 w-100 mnw-0">
  1035. <div class="media-body flex-grow-1 mnw-0 d-flex flex-column justify-content-center"><div class="flex-between-center c-gap-10 text-dark font-weight-500 font-15" title="${ddate}"><span class="text-truncate">${ddate}</span></div>
  1036. <div class="user-about hidden"></div></div></a></li>`;
  1037. $('.delivereduserslist').html(html).removeClass('hidden');
  1038. if (response.result.messageReadDate != null) {
  1039. var b = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatServerDateTime(response.result.messageReadDate);
  1040. var rdate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateTimeWithT(b);
  1041. var html = `<li class="list-group-item px-1 py-2 flex-between-center position-relative delivered-user">
  1042. <a href="javascript:;" class="d-flex align-items-center c-gap-10 w-100 mnw-0">
  1043. <div class="media-body flex-grow-1 mnw-0 d-flex flex-column justify-content-center"><div class="flex-between-center c-gap-10 text-dark font-weight-500 font-15" title="${rdate}"><span class="text-truncate">${rdate}</span></div>
  1044. <div class="user-about hidden"></div></div></a></li>`;
  1045. $('.readuserslist').html(html).removeClass('hidden');
  1046. }
  1047. }
  1048. }
  1049. else {
  1050. $('.deliver').html('Delivered To');
  1051. $('.read').html('Read by');
  1052. let recievedusers = response.result.recievedUsers;
  1053. let readusers = response.result.readUsers;
  1054. if (recievedusers != null) {
  1055. recievedusers = recievedusers.split('|');
  1056. recievedusers = recievedusers.filter(x => x !== '');
  1057. let deliveredUsersHtml = '';
  1058. if (recievedusers.length) {
  1059. for (let i = 0; i < recievedusers.length; i++) {
  1060. const contact = Chat.grpdetails.find(x => x.recipientId == recievedusers[i]);
  1061. if (contact != null) {
  1062. const contactName = contact.contactName;
  1063. const avatarHtml = instance._chatTemplate.getUserAvatarHtml(contact);
  1064. deliveredUsersHtml += `<li class="list-group-item px-1 py-2 flex-between-center position-relative delivered-user" id="deliveredUser_${recievedusers[i]}">
  1065. <a href="javascript:;" class="d-flex align-items-center c-gap-10 w-100 mnw-0">${avatarHtml}
  1066. <div class="media-body flex-grow-1 mnw-0 d-flex flex-column justify-content-center"><div class="flex-between-center c-gap-10 text-dark font-weight-500 font-15" title="${contactName}"><span class="text-truncate">${contactName}</span></div>
  1067. <div class="user-about hidden"></div></div></a></li>`;
  1068. }
  1069. }
  1070. $('.delivereduserslist').html(deliveredUsersHtml).removeClass('hidden');
  1071. }
  1072. }
  1073. if (readusers != null) {
  1074. readusers = readusers.split('|');
  1075. let readUserHtml = '';
  1076. readusers = readusers.filter(x => x !== '');
  1077. if (readusers.length) {
  1078. for (let i = 0; i < readusers.length; i++) {
  1079. const contact = Chat.grpdetails.find(x => x.recipientId == readusers[i]);
  1080. const contactName = contact.contactName;
  1081. const avatarHtml = instance._chatTemplate.getUserAvatarHtml(contact);
  1082. readUserHtml += `<li class="list-group-item px-1 py-2 flex-between-center position-relative delivered-user" id="readUser_${readusers[i]}">
  1083. <a href="javascript:;" class="d-flex align-items-center c-gap-10 w-100 mnw-0">${avatarHtml}
  1084. <div class="media-body flex-grow-1 mnw-0 d-flex flex-column justify-content-center"><div class="flex-between-center c-gap-10 text-dark font-weight-500 font-15" title="${contactName}"><span class="text-truncate">${contactName}</span></div>
  1085. <div class="user-about hidden"></div></div></a></li>`;
  1086. }
  1087. $('.readuserslist').html(readUserHtml).removeClass('hidden');
  1088. if (recievedusers == null) {
  1089. $('.delivereduserslist').html(readUserHtml).removeClass('hidden');
  1090. }
  1091. }
  1092. }
  1093. }
  1094. }
  1095. });
  1096. }
  1097. closeMsgInfo() {
  1098. if (Chat.isFullScreen) {
  1099. $('#fullScreenModal').modal('hide');
  1100. }
  1101. else {
  1102. $('#messageInfoSection').addClass('hidden');
  1103. $('#chatConvoBody').removeClass('hidden');
  1104. }
  1105. }
  1106. quotetemplate(chat) {
  1107. var msg;
  1108. var quotedmessage = chat.quotedMessage;
  1109. if (quotedmessage.includes('\n') || quotedmessage.includes('')) {
  1110. quotedmessage = quotedmessage.replace(/\n/g, '<br>');
  1111. }
  1112. if (chat.fileType != null) {
  1113. var quotedthumnail;
  1114. if (chat.fileType != null) {
  1115. if (chat.fileType.match('image.*')) {
  1116. quotedthumnail = chat.quotedMessage;
  1117. }
  1118. else {
  1119. if (chat.fileType.includes('audio') || chat.fileType.includes('video')) {
  1120. quotedthumnail = Unibase.Platform.Connect.Components.Chat.Instance().getfileThumbnail(chat.fileType);
  1121. }
  1122. else {
  1123. quotedthumnail = Unibase.Platform.Connect.Components.Chat.Instance().getfileThumbnail(chat.quotedMessage.substring(chat.quotedMessage.lastIndexOf('.') + 1));
  1124. }
  1125. }
  1126. quotedmessage = '<img class="thumb_file loadimg d-40" onerror ="ReloadImage(event)" src ="' + quotedthumnail + '" data-dynamic="1">';
  1127. }
  1128. }
  1129. msg = '<div class="quotemessage"><em><i class="fa fa-quote-left mr-5"></i>' + quotedmessage + '</em><div class="normalmessage" style="width:fit-content;">' + chat.message + '</div></div>';
  1130. return msg;
  1131. }
  1132. timeAnddateFormat(unformatdate) {
  1133. if (unformatdate.toString().includes('GMT')) {
  1134. unformatdate = moment.utc(unformatdate).format('MM/DD/YYYY hh:mm:ss');
  1135. }
  1136. unformatdate = unformatdate.replace(/-/g, '/').replace('T', ' ').split('.')[0];
  1137. var msgdate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDate(unformatdate);
  1138. var currentdate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDate(new Date());
  1139. var yesterday = new Date();
  1140. var previousdate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDate(yesterday.setDate(yesterday.getDate() - 1));
  1141. if (msgdate == currentdate) {
  1142. var date = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateTimeWithT(unformatdate);
  1143. msgdate = date.replace(msgdate, '');
  1144. }
  1145. else if (previousdate == msgdate) {
  1146. msgdate = "Yesterday";
  1147. }
  1148. return msgdate;
  1149. }
  1150. groupdefaultmessages(chat) {
  1151. var msghtml = "";
  1152. var messageDate = moment(chat.messageSentDate).format('MM-DD-YYYY');
  1153. var groupactivitytemplate = chat.message.replace(Chat.currentUser.name, "You");
  1154. if (chat.groupMessageType == 8) {
  1155. var messages = groupactivitytemplate.split(",");
  1156. var imagepath = messages[1].split("|");
  1157. var image1 = '<img class="thumb_file loadimg rounded-circle d-20" onerror = "ReloadImage(event)" src = "' + imagepath[0] + '" data-dynamic="1">';
  1158. var image2 = '<img class="thumb_file loadimg d-20 rounded-circle" onerror = "ReloadImage(event)" src = "' + imagepath[1] + '" data-dynamic="1">';
  1159. groupactivitytemplate = messages[0] + ` ${image1} <span class="faplay"><i class="fa fa-play"></i></span>${image2}`;
  1160. }
  1161. msghtml += '<div class="admindetails dateli_' + messageDate + '"><div class="admin-msg flex-center c-gap-10">' + groupactivitytemplate + '</div></div>';
  1162. return msghtml;
  1163. }
  1164. getfileThumbnail(filetype) {
  1165. var imgShow = "";
  1166. if (filetype.match('pdf.*')) {
  1167. imgShow = 'tenants//default//documenttypes//pdf.png';
  1168. Chat.messagetype = Unibase.Platform.Connect.Enums.MessageType.File;
  1169. }
  1170. else if (filetype.match('wordprocessingml.*')) {
  1171. imgShow = 'tenants//default//documenttypes//word.png';
  1172. Chat.messagetype = Unibase.Platform.Connect.Enums.MessageType.File;
  1173. }
  1174. else if (filetype.match('html.*') || filetype.match('cs.*') || filetype.match('ts.*') || filetype.match('js.*')) {
  1175. imgShow = 'tenants//default//documenttypes//code.png';
  1176. Chat.messagetype = Unibase.Platform.Connect.Enums.MessageType.File;
  1177. }
  1178. else if (filetype.match('txt.*')) {
  1179. imgShow = 'tenants//default//documenttypes//document.png';
  1180. Chat.messagetype = Unibase.Platform.Connect.Enums.MessageType.File;
  1181. }
  1182. else if (filetype.match('csv.*')) {
  1183. imgShow = 'tenants//default//documenttypes//csv.png';
  1184. Chat.messagetype = Unibase.Platform.Connect.Enums.MessageType.File;
  1185. }
  1186. else if (filetype.match('zip.*')) {
  1187. imgShow = 'tenants//default//documenttypes//zip.png';
  1188. Chat.messagetype = Unibase.Platform.Connect.Enums.MessageType.File;
  1189. }
  1190. else if (filetype.match('spreadsheetml.*') || filetype.match('excel.*')) {
  1191. imgShow = 'tenants//default//documenttypes//excel.png';
  1192. Chat.messagetype = Unibase.Platform.Connect.Enums.MessageType.File;
  1193. }
  1194. else if (filetype.match('rar.*')) {
  1195. imgShow = 'tenants//default//documenttypes//rar.png';
  1196. Chat.messagetype = Unibase.Platform.Connect.Enums.MessageType.File;
  1197. }
  1198. else if (filetype.match('exe.*')) {
  1199. imgShow = 'tenants//default//documenttypes//exe.png';
  1200. Chat.messagetype = Unibase.Platform.Connect.Enums.MessageType.File;
  1201. }
  1202. else if (filetype.match('audio.*')) {
  1203. imgShow = 'tenants//default//documenttypes//audio.png';
  1204. Chat.messagetype = Unibase.Platform.Connect.Enums.MessageType.Audio;
  1205. }
  1206. else if (filetype.match('mpeg.*') || filetype.match('video.*')) {
  1207. imgShow = 'tenants//default//documenttypes//video.png';
  1208. Chat.messagetype = Unibase.Platform.Connect.Enums.MessageType.Video;
  1209. }
  1210. else if (filetype.match('image.*')) {
  1211. imgShow = 'tenants//default//documenttypes//image.png';
  1212. Chat.messagetype = Unibase.Platform.Connect.Enums.MessageType.Image;
  1213. }
  1214. else {
  1215. imgShow = 'tenants//default//documenttypes//file.png';
  1216. Chat.messagetype = Unibase.Platform.Connect.Enums.MessageType.Unknown;
  1217. }
  1218. return imgShow;
  1219. }
  1220. hidestatus(chatgroupid, contactname) {
  1221. var contactid = Chat.contacts.find(x => x.contactName == contactname).contactId;
  1222. $('.user-last-chat_' + chatgroupid).removeClass('hidden');
  1223. $('.typing_active_' + chatgroupid).addClass('hidden').text('');
  1224. var contacts = $('.typing_active_' + chatgroupid).attr('data-typingcontacts').replace(contactname, '');
  1225. if (contacts == '') {
  1226. $('.typing_active_' + chatgroupid).addClass('hidden');
  1227. $('.typing').addClass('hidden');
  1228. }
  1229. else {
  1230. var text = contacts.replace(/|/g, '&');
  1231. if (text.startsWith('&')) {
  1232. text = text.replace('&', '');
  1233. }
  1234. $('.typing_active_' + chatgroupid).text(text);
  1235. }
  1236. $('.typing_active_' + chatgroupid).attr('data-typingcontacts', contacts);
  1237. $('.typing').find('.typingspan_' + contactid).remove();
  1238. }
  1239. quoteMessage(chatid) {
  1240. Chat.chatid = chatid;
  1241. var istext = true;
  1242. let index = Chat.chatlistarray.findIndex(x => x.chatId == Chat.chatid);
  1243. if (index == -1)
  1244. return;
  1245. var msg = Chat.chatlistarray[index].message;
  1246. $('#input_msg_send_chatapp').focus();
  1247. msg = msg.replace(/<br>/g, '').replace(/&nbsp/g, '').trim();
  1248. var quotedmsg = Chat.chatlistarray[index].quotedMessage;
  1249. var filepathdata = Chat.chatlistarray[index].filePath;
  1250. if (filepathdata != "null" && quotedmsg == null && filepathdata != undefined) {
  1251. var filetype = Chat.chatlistarray[index].fileName.substring(Chat.chatlistarray[index].fileName.lastIndexOf('.') + 1);
  1252. if (Chat.chatlistarray[index].fileType.includes('audio') || Chat.chatlistarray[index].fileType.includes('video')) {
  1253. filetype = Chat.chatlistarray[index].fileType;
  1254. }
  1255. if (!filetype.match('image.*')) {
  1256. filepathdata = Unibase.Platform.Connect.Components.Chat.Instance().getfileThumbnail(filetype);
  1257. }
  1258. msg = '<img class="thumb_file loadimg d-40" onerror="ReloadImage(event)" src = "' + filepathdata + '" data-dynamic="1">';
  1259. istext = false;
  1260. }
  1261. var mergemsg = "";
  1262. if ($.trim(msg).length > 400) {
  1263. mergemsg = 'text-truncate';
  1264. }
  1265. var quotehtml = `<span class="quotemessage_${Chat.chatGroupId} flex-between-center c-gap-10 biz-highlight-bg-color" id=${chatid}> ${istext ? `<span class="word-break ${mergemsg}">${msg}</span>` : `${msg}`}<i class="icon dripicons-cross text-danger cursor-pointer" id = "closeQuote"></i></span >`;
  1266. $('.div_selected_files').addClass('hidden');
  1267. $('#quoteMsgWrap').html(quotehtml).removeClass('hidden');
  1268. $("#closeQuote").click(function () {
  1269. $('.quotemessage_' + Chat.chatGroupId).remove();
  1270. $('#quoteMsgWrap').addClass('hidden');
  1271. $('#icon_send').addClass('hidden');
  1272. $('#recordaudio').removeClass('hidden');
  1273. });
  1274. }
  1275. draftMessage() {
  1276. var chatId = $('.quotemessage_' + Chat.chatGroupId).attr("id");
  1277. var msg = $('#input_msg_send_chatapp').val();
  1278. var draftmessage = null;
  1279. if (chatId != undefined || msg != '') {
  1280. draftmessage = JSON.stringify({ quote: chatId, message: msg });
  1281. }
  1282. Unibase.Platform.Connect.Managers.ChatManager.Instance().draftMessage(draftmessage, Chat.chatGroupId).then(function (response) {
  1283. if (response.result != null) {
  1284. var index = Chat.recentChats.findIndex(x => x.chatGroupId == Chat.chatGroupId);
  1285. if (index != -1) {
  1286. if (response.result.draftMessage != "null" && response.result.draftMessage != null) {
  1287. Chat.recentChats[index].draftMessage = response.result.draftMessage;
  1288. }
  1289. else {
  1290. Chat.recentChats[index].draftMessage = "";
  1291. }
  1292. $('.user-last-chat_' + response.result.chatGroupId).text(response.result.lastMessage);
  1293. var lastupdatedate = "";
  1294. if (Chat.chatlistarray.length > 0) {
  1295. if (Chat.chatlistarray[Chat.chatlistarray.length - 1].messageType == 0) {
  1296. lastupdatedate = Chat.chatlistarray[Chat.chatlistarray.length - 2].messageSentDate;
  1297. }
  1298. else {
  1299. lastupdatedate = Chat.chatlistarray[Chat.chatlistarray.length - 1].messageSentDate;
  1300. }
  1301. var lastmsgdt = Chat.Instance().timeAnddateFormat(lastupdatedate);
  1302. Chat.recentChats[index].messageLastUpdatedDate = lastupdatedate;
  1303. }
  1304. $('.userChat_' + Chat.chatGroupId).find('.last-chat-time').text(lastmsgdt);
  1305. Chat.recentChats[index].lastMessage = response.result.lastMessage;
  1306. if (response.result.lastMessage != "") {
  1307. Chat.recentChats[index].lastChatId = Chat.chatlistarray[Chat.chatlistarray.length - 1].chatId;
  1308. }
  1309. }
  1310. Chat.chatlistarray = [];
  1311. Chat.chatGroupId = 0;
  1312. }
  1313. });
  1314. }
  1315. editMessage(chatid) {
  1316. var chatInfo = Chat.chatlistarray.find(x => x.chatId == chatid);
  1317. chatInfo.message = chatInfo.message.replace(/&nbsp/g, ' ').replace(/<br>/g, '\n').replace(/&gt/g, '>');
  1318. $('#input_msg_send_chatapp').val(chatInfo.message).trigger('keyup');
  1319. $('#input_msg_send_chatapp').focus();
  1320. $('#icon_send').removeClass('hidden');
  1321. $('#recordaudio').addClass('hidden');
  1322. Chat.chatid = chatid;
  1323. Chat.isEdit = true;
  1324. }
  1325. edit(chatid) {
  1326. $('.div_CLose').addClass('hidden');
  1327. var text = $('#input_msg_send_chatapp').val().toString();
  1328. var chatInfo = Unibase.Platform.Connect.Components.Chat.chatlistarray.find(x => x.chatId == chatid);
  1329. let req = new Unibase.Platform.Connect.Requests.Chat();
  1330. req = chatInfo;
  1331. if (text.trim() == chatInfo.message.trim()) {
  1332. $('#input_msg_send_chatapp').val('');
  1333. return;
  1334. }
  1335. if (text.includes('\n') || text.includes('')) {
  1336. text = text.replace(/ /g, '&nbsp').replace(/\n/g, '<br>');
  1337. }
  1338. req.Message = text;
  1339. this._chatmanager.EditMessage(chatid, text).then(function (response) {
  1340. if (response.status == Unibase.Data.Status.Success) {
  1341. var packet = Chat.Instance().reqToServerMessagePacket(response.result);
  1342. Chat.chatlistarray[Chat.chatlistarray.findIndex(x => x.chatId == chatid)] = response.result;
  1343. Chat.Instance().editHtml(chatid);
  1344. Unibase.Platform.Connect.Components.Chatter.Instance().editMessage(packet, null);
  1345. $('#input_msg_send_chatapp').val('');
  1346. $('#icon_send').addClass('hidden');
  1347. $('#recordaudio').removeClass('hidden');
  1348. Chat.istyping = true;
  1349. Chat.isEdit = false;
  1350. }
  1351. });
  1352. }
  1353. starmessages() {
  1354. var html = '';
  1355. var list = '';
  1356. $('.staredmsgs-list').html('');
  1357. var staremessage = Chat.chatlistarray.filter(x => x.isStared != null && x.isStared.includes(Chat.currentUser.userId));
  1358. $(".profiledetails").addClass('hidden');
  1359. Chat.privatewindow = true;
  1360. for (var i = 0; i < staremessage.length; i++) {
  1361. var q = '';
  1362. var editicon = '';
  1363. var fname = '';
  1364. var msg = staremessage[i].message;
  1365. if (staremessage[i].isEdit) {
  1366. editicon = '<a href="javascript:;" class="btn btn-icon btn-primary btn-icon-circle btn-xs d-20 ml-1 edit-msg-icon"><span class="btn-icon-wrap"><i class="las la-pencil-alt"></i></span></a>';
  1367. }
  1368. if (staremessage[i].quotedMessage != null) {
  1369. q = Unibase.Platform.Connect.Components.Chat.Instance().quotetemplate(staremessage[i]);
  1370. msg = '';
  1371. }
  1372. if (Chat.isPrivate) {
  1373. var showfromuser = "hidden";
  1374. }
  1375. if (staremessage[i].fromUserName != Chat.currentUser.name) {
  1376. fname = '<div><span class="fromUserIdname ' + showfromuser + ' font-10" style="color:#dd6767">' + staremessage[i].fromUserName + '<hr class="ma-0 mb-5"></span></div>';
  1377. }
  1378. var localDate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDate(staremessage[i].messageSentDate);
  1379. var messageDate = moment.utc(staremessage[i].messageSentDate).format('MM-DD-YYYY');
  1380. var msgTime = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateTimeWithT(staremessage[i].messageSentDate);
  1381. msgTime = msgTime.replace(localDate, "");
  1382. var getdatehtml = "";
  1383. if ($('#starmsg_' + messageDate).length == 0) {
  1384. getdatehtml = Chat.Instance().getMessageDate(messageDate);
  1385. }
  1386. if (Chat.currentUser.userId == staremessage[i].fromUserId) {
  1387. html = '<div class="message-wrapper pull-right" style="display:inline-flex;flex-direction:column"><span class="starmsg-span" style = "background-color: #DEF7F9;color: #2C343E;padding: 5px 10px;border-radius: 10px;box-shadow: 0 4px 5px #e5d9d9">' + '' + fname + q + msg + '' + editicon + '<a href="javascript:;" class="btn btn-icon btn-icon-circle btn-primary btn-xs d-20 star-msg-icon"><span class="btn-icon-wrap"><i class="icon dripicons-star"></i></span></a></span><span style="font-size:11px;margin:5px;text-align:right">' + msgTime + '</span></div>';
  1388. }
  1389. else {
  1390. html = '<div class="message-wrapper pull-left" style="display:inline-flex;flex-direction:column"><span class="starmsg-span" style = "background-color: #f6f5f5;padding: 5px 10px;border-radius: 10px;color: #000;box-shadow: 0 4px 5px #e5d9d9">' + '' + fname + q + msg + '' + editicon + '<a href="javascript:;" class="btn btn-icon btn-icon-circle btn-primary btn-xs d-20 star-msg-icon"><span class="btn-icon-wrap"><i class="icon dripicons-star"></i></span></a></span><span style="font-size:11px;margin:5px;text-align:left">' + msgTime + '</span></div>';
  1391. }
  1392. list = '<span style="text-align:center">' + getdatehtml + '</span><li class="staredmsgs_' + staremessage[i].chatId + ' mb-10" id="starmsg_' + messageDate + '">' + html + '</li>';
  1393. $('.staredmsgs-list').append(list);
  1394. }
  1395. $('.starredmsgs-section').removeClass('hidden');
  1396. $('#closestarmsgswindow').click(function () {
  1397. $('.starredmsgs-section').addClass('hidden');
  1398. $('.profiledetails').removeClass('hidden');
  1399. });
  1400. }
  1401. getStarMessagesCount() {
  1402. return Chat.chatlistarray.filter(x => x.isStared != null && x.isStared.includes(Chat.currentUser.userId) && !x.isDelete).length;
  1403. }
  1404. closeStarMessages() {
  1405. $('.chat-message-wrap').removeClass('hidden');
  1406. $('.chatoptions-wrapper').removeClass('hidden');
  1407. $("#starMsgHeader").addClass('hidden');
  1408. $("#chatMsgHeader").removeClass('hidden');
  1409. if (!Chat.isFullScreen) {
  1410. $("#chatConvoBody").addClass('hidden');
  1411. $(".profiledetails").removeClass('hidden');
  1412. }
  1413. $('#chatFooter').removeClass('hidden');
  1414. }
  1415. searchdesign() {
  1416. if (!$('#chatMsgSearchWrap').length) {
  1417. const html = '<div id="chatMsgSearchWrap" class="h-100 position-relative"><div class="search_message d-flex align-items-center justify-content-between h-100 c-gap-10"><div class="msg-search-wrap position-relative h-40p w-100"><input type="text" id="search_chatmsg" placeholder="Search Message...." onkeyup="Unibase.Platform.Connect.Components.Chat.Instance().searchmessages(event);" class="user pl-25 h-100 msg-search-input custom-chat-input"><i class="fa fa-search search-left-icon biz-highlight-bg-color"></i><span class="close_search mr-5"></div><i class="zmdi zmdi-close text-danger font-20" id="back_toheader" ></i></span></div><div class="searchmsgcount flex-between-center hidden"><div><span class="up_count pr-2">0</span>of<span class="total_count px-2">0</span><span>matches</span></div><div><span class="previous_searched"><a class="btn btn-icon btn-flush-biz-theme btn-rounded flush-soft-hover h-25p w-25p mr-1 arrow-icon up-arrow" onclick="Unibase.Platform.Connect.Components.Chat.Instance().searchedmessages(false);"><span class="btn-icon-wrap"><i class="fa fa-angle-up font-20 text-dark px-1"></i></span><a class="btn btn-icon btn-flush-biz-theme btn-rounded flush-soft-hover h-25p w-25p ml-1 arrow-icon down-arrow" onclick="Unibase.Platform.Connect.Components.Chat.Instance().searchedmessages(true);"><span class="btn-icon-wrap"><i class="fa fa-angle-down font-20 text-dark"></i></span></a></div></div></div>';
  1418. $('#chatMsgHeader').append(html);
  1419. }
  1420. $('#chatMsgSearchWrap').removeClass('hidden');
  1421. $('.div_chatMediaHeader').addClass('hidden');
  1422. var c = 1;
  1423. for (var i = 0; i < c; i++) {
  1424. if (!$('.more_msg').hasClass('d-none')) {
  1425. $('.morediv').trigger('click');
  1426. c++;
  1427. }
  1428. }
  1429. $('#back_toheader').click(function () {
  1430. $('#search_chatmsg').val('');
  1431. $('.div_chatMediaHeader').removeClass('hidden');
  1432. $('#chatMsgSearchWrap').addClass('hidden');
  1433. $('.searched-msg').removeClass('searched-msg active');
  1434. $('.searchmsgcount .arrow-icon').addClass('disabled');
  1435. $('.searchmsgcount').addClass('hidden');
  1436. });
  1437. }
  1438. searchmessages(keydata) {
  1439. let searchMsgTimer;
  1440. window.clearTimeout(searchMsgTimer);
  1441. searchMsgTimer = setTimeout(() => {
  1442. if (keydata.keyCode == 13) {
  1443. const upCount = +$('.up_count').text();
  1444. const totalCount = +$('.total_count').text();
  1445. if (upCount < totalCount) {
  1446. Chat.Instance().searchedmessages(false);
  1447. }
  1448. return;
  1449. }
  1450. var count = 0;
  1451. Chat.messagesid = [];
  1452. $('.up_count').text(0);
  1453. var list = Chat.chatlistarray.filter(x => x.groupMessageType == 0);
  1454. if (list.length > 0) {
  1455. var word = $('#search_chatmsg').val().toString().toLowerCase().trim();
  1456. if (word == "") {
  1457. $('.total_count').text(0);
  1458. $('.searched-msg').removeClass('searched-msg active');
  1459. $('.searchmsgcount .arrow-icon').addClass('disabled');
  1460. $('.searchmsgcount').addClass('hidden');
  1461. }
  1462. else {
  1463. for (const msg of list) {
  1464. const chatId = msg.chatId;
  1465. var msgText = msg.message.toLowerCase().trim();
  1466. if (msgText.indexOf(word) >= 0) {
  1467. count++;
  1468. var item = {
  1469. index: count, id: msg.chatId
  1470. };
  1471. Chat.messagesid.push(item);
  1472. var exp = new RegExp(word, "g");
  1473. var msgHtml = msgText.replace(exp, `<span id="msgcolor_${chatId}" class="searched-msg" data-chatid="${chatId}">${word}</span>`);
  1474. $(`#message_${chatId}`).html(msgHtml);
  1475. }
  1476. else {
  1477. $(`#msgcolor_${chatId}`).removeClass('searched-msg active');
  1478. }
  1479. $('.total_count').text(count);
  1480. $('.searchmsgcount').removeClass('hidden');
  1481. }
  1482. if (count != 0) {
  1483. $('.up_count').text(1);
  1484. if (count === 1) {
  1485. $('.searchmsgcount .arrow-icon').addClass('disabled');
  1486. }
  1487. else {
  1488. $('.searchmsgcount .up-arrow').removeClass('disabled');
  1489. $('.searchmsgcount .down-arrow').addClass('disabled');
  1490. }
  1491. }
  1492. else {
  1493. $('.searchmsgcount .arrow-icon').addClass('disabled');
  1494. }
  1495. if (keydata.keyCode != 13) {
  1496. const lastSearchedMsgEl = $('.messageslist .searched-msg').last();
  1497. lastSearchedMsgEl.addClass('active');
  1498. lastSearchedMsgEl[0].scrollIntoView({ block: "center" });
  1499. }
  1500. }
  1501. if (count != 0) {
  1502. $('.up_count').text(1);
  1503. }
  1504. }
  1505. }, 1000);
  1506. }
  1507. searchedmessages(downarrow) {
  1508. let upCount = +$('.up_count').text();
  1509. const totalCount = +$('.total_count').text();
  1510. let activeItemIndex = Chat.messagesid.findIndex(x => x.id === $('.searched-msg.active').attr('data-chatid'));
  1511. activeItemIndex = downarrow ? activeItemIndex + 1 : activeItemIndex - 1;
  1512. const countVal = downarrow ? upCount - 1 : upCount + 1;
  1513. $('.messageslist .searched-msg.active').removeClass('active');
  1514. $(`#msgcolor_${Chat.messagesid[activeItemIndex].id}`).addClass('active');
  1515. $(`#msgcolor_${Chat.messagesid[activeItemIndex].id}`)[0].scrollIntoView({ block: "center" });
  1516. $('.up_count').text(countVal);
  1517. upCount = +$('.up_count').text();
  1518. if (upCount === totalCount) {
  1519. $('.searchmsgcount .up-arrow').addClass('disabled');
  1520. $('.searchmsgcount .down-arrow').removeClass('disabled');
  1521. }
  1522. else if (upCount === 1) {
  1523. $('.searchmsgcount .up-arrow').removeClass('disabled');
  1524. $('.searchmsgcount .down-arrow').addClass('disabled');
  1525. }
  1526. else if (upCount < totalCount) {
  1527. $('.searchmsgcount .down-arrow').removeClass('disabled');
  1528. $('.searchmsgcount .up-arrow').removeClass('disabled');
  1529. }
  1530. }
  1531. copyMessage(chatid) {
  1532. var chatInfo = Chat.chatlistarray.find(x => x.chatId == chatid);
  1533. var message = chatInfo.message;
  1534. if (message.startsWith('*') && message.endsWith('*')) {
  1535. message = message.replaceAll('*', '');
  1536. }
  1537. else if (message.startsWith('_') && message.endsWith('_')) {
  1538. message = message.replaceAll('_', '');
  1539. }
  1540. else if (message.startsWith('~') && message.endsWith('~')) {
  1541. message = message.replaceAll('~', '');
  1542. }
  1543. if (message.includes('<br>') || message.includes('&nbsp')) {
  1544. message = message.replaceAll(/<br>/g, '\n');
  1545. message = message.replaceAll(/&nbsp/g, '');
  1546. }
  1547. var text = message;
  1548. var textArea = document.createElement("textarea");
  1549. textArea.value = text;
  1550. document.body.appendChild(textArea);
  1551. textArea.select();
  1552. document.execCommand("Copy");
  1553. textArea.remove();
  1554. }
  1555. deleteForEveryone(chatid) {
  1556. const instance = this;
  1557. if (Chat.isBlock) {
  1558. Chat.Instance().BlockAlert();
  1559. return;
  1560. }
  1561. instance.chatPopup({
  1562. message: 'Are you sure you want to delete for everyone?',
  1563. buttons: {
  1564. confirm: {
  1565. label: 'Delete'
  1566. },
  1567. cancel: {
  1568. label: 'Cancel'
  1569. }
  1570. },
  1571. callback: (result) => {
  1572. if (result) {
  1573. var chatInfo = Unibase.Platform.Connect.Components.Chat.chatlistarray.find(x => x.chatId == chatid);
  1574. instance._chatmanager.DeleteForEveryone(chatid, Chat.chatGroupId).then(function (response) {
  1575. if (response.status == Unibase.Data.Status.Success) {
  1576. chatInfo.isDelete = true;
  1577. Chat.chatlistarray[Chat.chatlistarray.findIndex(x => x.chatId == chatid)] = response.result;
  1578. var packet = Chat.Instance().reqToServerMessagePacket(chatInfo);
  1579. Unibase.Platform.Connect.Components.Chatter.Instance().Deleteforeveryone(packet, null);
  1580. Chat.Instance().deleteForEveryoneHtml(chatid);
  1581. }
  1582. });
  1583. }
  1584. }
  1585. });
  1586. }
  1587. deleteMessage(chatid) {
  1588. const instance = this;
  1589. instance.chatPopup({
  1590. message: "Are you sure you want to delete?",
  1591. buttons: {
  1592. confirm: {
  1593. label: 'Delete'
  1594. },
  1595. cancel: {
  1596. label: 'Cancel'
  1597. }
  1598. },
  1599. callback: function (result) {
  1600. if (result) {
  1601. var chatlistarray = Unibase.Platform.Connect.Components.Chat.chatlistarray;
  1602. var index = chatlistarray.findIndex(x => x.chatId == chatid);
  1603. var messageDate = moment(chatlistarray[index].messageSentDate).format('MM-DD-YYYY');
  1604. instance._chatmanager.Delete(chatid, Chat.currentUser.userId).then(function (response) {
  1605. if (response.status == Unibase.Data.Status.Success) {
  1606. Unibase.Platform.Connect.Components.Chat.chatlistarray[index] = response.result;
  1607. var nextmsgtime = $('.chat-messages_' + chatid).next().find('.time').attr("data-msgtime");
  1608. var currentmsgtime = $('.chat-messages_' + chatid).find('.time').attr("data-msgtime");
  1609. var previoustime = $('.chat-messages_' + chatid).prev().find('.time').attr("data-msgtime");
  1610. if (nextmsgtime != currentmsgtime) {
  1611. if (currentmsgtime == previoustime) {
  1612. $('.chat-messages_' + chatid).prev().find('.time').removeClass('hidden');
  1613. }
  1614. }
  1615. $('.chat-messages_' + chatid).remove();
  1616. if ($('.dateli_' + messageDate).length == 0) {
  1617. $('#date_' + messageDate).remove();
  1618. }
  1619. }
  1620. });
  1621. }
  1622. }
  1623. });
  1624. }
  1625. forwardDesign(chatid) {
  1626. const instance = this;
  1627. var html = instance._chatTemplate.getForwardTemplate();
  1628. if (!Chat.isFullScreen) {
  1629. $('#forwardContactsSection').html(html).removeClass('hidden');
  1630. $('#chatConvoBody').addClass('hidden');
  1631. $('.webcam').addClass("hidden");
  1632. }
  1633. else {
  1634. $('#fullScreenModalContent').html(html);
  1635. $('#fullScreenModal').modal();
  1636. }
  1637. $('._btnSendToMany').removeClass('hidden');
  1638. $('#forwardSendBtn').attr('data-chatid', chatid);
  1639. $('#forwardSendBtn').click(function () {
  1640. instance.sendToMany($(this).attr('data-chatid'));
  1641. });
  1642. this.forwardContacts();
  1643. }
  1644. sendToMany(chatid) {
  1645. if (chatid == "Multi-Forward") {
  1646. Unibase.Platform.Connect.Components.Chat.Instance().multipleforward();
  1647. }
  1648. else {
  1649. Unibase.Platform.Connect.Components.Chat.Instance().forwardMessage(chatid);
  1650. }
  1651. }
  1652. multipleforward() {
  1653. var recipients = [];
  1654. $('input[name="forwardcontact"]').each(function () {
  1655. if ($(this).is(':checked')) {
  1656. var chatGroupid = Number($(this).attr('data-chatgroupid'));
  1657. var contactid = Number($(this).attr('data-contactid'));
  1658. var chatobj = {
  1659. contactId: contactid, chatGroupId: chatGroupid
  1660. };
  1661. recipients.push(chatobj);
  1662. }
  1663. });
  1664. var obj = { Recipients: recipients, Messages: Chat.MultiSelect };
  1665. Unibase.Platform.Connect.Managers.ChatManager.Instance().forwardmultiple(obj).then(function (response) {
  1666. if (response.status == Unibase.Data.Status.Success) {
  1667. for (var i = 0; i < response.result.length; i++) {
  1668. var contactinfo = Chat.Instance().getContactInfo(response.result[i].contactId, response.result[i].chatGroupId);
  1669. var packet = Chat.Instance().reqToClientMessagePacket(response.result[i]);
  1670. packet.isPrivate = contactinfo.isPrivate;
  1671. packet.toUserPhotoUrl = contactinfo.photoUrl;
  1672. packet.fromUserName = contactinfo.contactName;
  1673. packet.fromUserId = contactinfo.contactId;
  1674. packet.message = response.result[i].lastMessage;
  1675. packet.messageSentDate = new Date();
  1676. packet.groupMessageType = 0;
  1677. Chat.Instance().newChat(packet, true);
  1678. }
  1679. Chat.MultiSelect = [];
  1680. MessageHelper.Instance().showSuccess("Successfully forwarded", '');
  1681. }
  1682. else {
  1683. alert("failed to forward");
  1684. }
  1685. $('.forward-contacts-section').addClass('hidden');
  1686. $('.chat-convo-body').removeClass('hidden');
  1687. });
  1688. }
  1689. closeForwardContacts() {
  1690. Chat.groupcontacts = [];
  1691. if (!Chat.isFullScreen) {
  1692. $('#chatConvoBody').removeClass('hidden').siblings().addClass('hidden');
  1693. }
  1694. else {
  1695. $('#fullScreenModal').modal('hide');
  1696. }
  1697. }
  1698. starMessageTemplate(chatId) {
  1699. var index = Chat.chatlistarray.findIndex(x => x.chatId == chatId);
  1700. let editedmsg = Chat.chatlistarray[index];
  1701. let currentUser = Chat.currentUser.userId.toString();
  1702. var msg = editedmsg.message;
  1703. if (editedmsg.isStared == null) {
  1704. Unibase.Platform.Connect.Components.Chat.chatlistarray[index].isStared = "";
  1705. }
  1706. var RemoveStarmessage = '<li class="unstar"><a class="dropdown-item" id="unstar" href="javascript:void(0);" onclick="Unibase.Platform.Connect.Components.Chat.Instance().StarMessage(\'' + editedmsg.chatId + '\')";>Unstar message</a></li>';
  1707. var Starmessage = '<li class="star"><a class="dropdown-item" id="star" href="javascript:void(0);" onclick="Unibase.Platform.Connect.Components.Chat.Instance().StarMessage(\'' + editedmsg.chatId + '\')";>Star message</a></li>';
  1708. var result = editedmsg.isStared.includes(currentUser);
  1709. if (result) {
  1710. var dropdownElement = $("#drpdwn_" + editedmsg.chatId);
  1711. dropdownElement.find(".star").remove();
  1712. msg = `<a href="javascript:;" class="btn btn-icon btn-icon-circle btn-primary btn-xs d-20 star-msg-icon"><span class="btn-icon-wrap"><i class="icon dripicons-star"></i></span></a>`;
  1713. $(RemoveStarmessage).appendTo("#drpdwn_" + editedmsg.chatId);
  1714. $('#message_' + editedmsg.chatId).prepend(msg);
  1715. $('#message_' + editedmsg.chatId).closest('.message-body').addClass('star-msg-body');
  1716. }
  1717. else {
  1718. var dropdownElement = $("#drpdwn_" + editedmsg.chatId);
  1719. dropdownElement.find(".unstar").remove();
  1720. $('#message_' + editedmsg.chatId).find('.star-msg-icon').remove();
  1721. $('#message_' + editedmsg.chatId).closest('.message-body').removeClass('star-msg-body');
  1722. msg = msg;
  1723. $(Starmessage).appendTo("#drpdwn_" + editedmsg.chatId);
  1724. }
  1725. }
  1726. StarMessage(chatid) {
  1727. let currentUser = Chat.currentUser.userId;
  1728. this._chatmanager.StarMessage(chatid, currentUser).then(function (response) {
  1729. if (response.status == Unibase.Data.Status.Success) {
  1730. Chat.chatlistarray[Chat.chatlistarray.findIndex(x => x.chatId == chatid)] = response.result;
  1731. Chat.Instance().starMessageTemplate(chatid);
  1732. }
  1733. });
  1734. }
  1735. UpdateDeliveryStatus(packet) {
  1736. if (Chat.chatGroupId == packet.chatGroupId) {
  1737. let index = Unibase.Platform.Connect.Components.Chat.chatlistarray.findIndex(x => x.chatId == packet.chatId);
  1738. if (index != -1) {
  1739. Unibase.Platform.Connect.Components.Chat.chatlistarray[index] = packet;
  1740. }
  1741. else {
  1742. Unibase.Platform.Connect.Components.Chat.chatlistarray.push(packet);
  1743. }
  1744. Chat.Instance().updateMessageStatus(packet.chatId);
  1745. }
  1746. }
  1747. UpdateReadStatus(packet) {
  1748. if (Chat.chatGroupId == packet.chatGroupId) {
  1749. let index = Unibase.Platform.Connect.Components.Chat.chatlistarray.findIndex(x => x.chatId == packet.chatId);
  1750. if (index != -1) {
  1751. Unibase.Platform.Connect.Components.Chat.chatlistarray[index] = packet;
  1752. }
  1753. else {
  1754. Unibase.Platform.Connect.Components.Chat.chatlistarray.push(packet);
  1755. }
  1756. Chat.Instance().updateMessageStatus(packet.chatId);
  1757. }
  1758. }
  1759. editedMsg(packet) {
  1760. if (Chat.chatGroupId == packet.chatGroupId) {
  1761. let index = Unibase.Platform.Connect.Components.Chat.chatlistarray.findIndex(x => x.chatId == packet.chatId);
  1762. Unibase.Platform.Connect.Components.Chat.chatlistarray[index] = packet;
  1763. Chat.Instance().editHtml(packet.chatId);
  1764. }
  1765. else {
  1766. var chatindex = Chat.recentChats.findIndex(x => x.chatGroupId == packet.chatGroupId);
  1767. if (chatindex != -1) {
  1768. if (Chat.recentChats[chatindex].lastChatId == packet.chatId) {
  1769. Chat.recentChats[chatindex].lastMessage = packet.message;
  1770. $('.user-last-chat_' + packet.chatGroupId).text(packet.message);
  1771. }
  1772. }
  1773. }
  1774. }
  1775. deleteall(packet) {
  1776. if (Chat.chatGroupId == packet.chatGroupId) {
  1777. let index = Unibase.Platform.Connect.Components.Chat.chatlistarray.findIndex(x => x.chatId == packet.chatId);
  1778. Unibase.Platform.Connect.Components.Chat.chatlistarray[index] = packet;
  1779. Chat.Instance().deleteForEveryoneHtml(packet.chatId);
  1780. }
  1781. else {
  1782. var chatindex = Chat.recentChats.findIndex(x => x.chatGroupId == packet.chatGroupId);
  1783. if (chatindex != -1) {
  1784. if (Chat.recentChats[chatindex].lastChatId == packet.chatId) {
  1785. Chat.recentChats[chatindex].lastMessage = "This message was deleted";
  1786. $('.user-last-chat_' + packet.chatGroupId).text("This message was deleted");
  1787. }
  1788. }
  1789. }
  1790. Chat.mediadoclinks = Chat.chatlistarray.filter(x => x.messageType != 1 && 2).filter(x => x.isDelete == false).filter(x => x.groupMessageType == 0);
  1791. }
  1792. deleteForEveryoneHtml(chatid) {
  1793. var chatinfo = Chat.chatlistarray.find(x => x.chatId == chatid);
  1794. var message = (Chat.currentUser.userId == chatinfo.fromUserId) ? "You deleted this message" : "This message was deleted";
  1795. var html = '<span class="delete-msg"><i>' + message + '</i><span class="btn btn-icon btn-icon-circle btn-icon-style-2 btn-soft-danger d-20 ml-1 cursor-pointer del-icon" onclick="Unibase.Platform.Connect.Components.Chat.Instance().deleteMessage(\'' + chatid + '\')"><span class="btn-icon-wrap"><i class="las la-trash-alt font-14"></i></span></span></span>';
  1796. $('.chat-messages_' + chatinfo.chatId).find('.message-span').html(html);
  1797. $('.chat-messages_' + chatinfo.chatId).find('.message-download').remove();
  1798. $('.chat-messages_' + chatinfo.chatId).find('.msg_status').remove();
  1799. var optionhtml = '<li class="delete"><a class="dropdown-item" href="javascript:void(0);" onclick="Unibase.Platform.Connect.Components.Chat.Instance().deleteMessage(\'' + chatid + '\')"><span>Delete</span></a></li>';
  1800. $('.chat-messages_' + chatinfo.chatId).find('.chatoptions-wrapper').find('.dropdown-menu').html(optionhtml);
  1801. }
  1802. editHtml(chatId) {
  1803. var html = '';
  1804. var chatinfo = Chat.chatlistarray.find(x => x.chatId == chatId);
  1805. var msg = chatinfo.message;
  1806. if (chatinfo.quotedMessage != null) {
  1807. html += Unibase.Platform.Connect.Components.Chat.Instance().quotetemplate(chatinfo);
  1808. msg = '';
  1809. }
  1810. html += '<span>' + msg + '</span><a href="javascript:;" class="btn btn-icon btn-primary btn-icon-circle btn-xs d-20 ml-1 edit-msg-icon"><span class="btn-icon-wrap"><i class="las la-pencil-alt"></i></span></a>';
  1811. if (chatinfo.isStared != null) {
  1812. html = html + ' <a href="javascript:;" class="btn btn-icon btn-icon-circle btn-primary btn-xs d-20 star-msg-icon"><span class="btn-icon-wrap"><i class="icon dripicons-star"></i></span></a>';
  1813. }
  1814. $('.chat-messages_' + chatinfo.chatId).find('.message-span').html(html);
  1815. }
  1816. showtyping(contactname, contactid, chatgroupId, isprivate) {
  1817. $('.user-last-chat_' + chatgroupId).addClass('hidden');
  1818. $('.typing_active_' + chatgroupId).removeClass('hidden');
  1819. var typingtext = "typing";
  1820. var contactstext = contactname;
  1821. if (!isprivate) {
  1822. var typingcontacts = contactname;
  1823. if ($('.typing_active_' + chatgroupId).attr('data-typingcontacts') != '') {
  1824. typingcontacts += $('.typing_active_' + chatgroupId).text().replace("typing", "&");
  1825. contactstext = $('.typing_active_' + chatgroupId).attr('data-typingcontacts') + "|" + contactname;
  1826. }
  1827. typingtext = typingcontacts + " typing";
  1828. }
  1829. $('.typing_active_' + chatgroupId).attr('data-typingcontacts', contactstext).text(typingtext);
  1830. $('.user-last-chat_' + chatgroupId).addClass('hidden');
  1831. $('.typing').removeClass('hidden');
  1832. if (Chat.chatGroupId == chatgroupId) {
  1833. Chat.Instance().loadTyping(chatgroupId);
  1834. }
  1835. }
  1836. loadTyping(chatgroupid) {
  1837. $('.typing').html('');
  1838. var element = $('.typing_active_' + chatgroupid).attr('data-typingcontacts');
  1839. if (element != undefined) {
  1840. var typingcontacts = $('.typing_active_' + chatgroupid).attr('data-typingcontacts').split("|").filter(x => x != "");
  1841. for (let i = 0; i < typingcontacts.length; i++) {
  1842. var html = Chat.Instance()._chatTemplate.getTypingTemplate(typingcontacts[i]);
  1843. $('.typing').append(html);
  1844. }
  1845. (typingcontacts.length == 0) ? $('.typing').html('').addClass('hidden') : $('.typing').removeClass('hidden');
  1846. }
  1847. }
  1848. LoadAttachments(event) {
  1849. var a = '';
  1850. if (event.files != undefined) {
  1851. var files = event.files;
  1852. var imgShow = "";
  1853. for (let i = 0; i < files.length; i++) {
  1854. let f = files[i];
  1855. a = f.name.substring(f.name.lastIndexOf('.') + 1);
  1856. if (f.type.includes('audio') || f.type.includes('video')) {
  1857. a = f.type;
  1858. }
  1859. var reader = new FileReader();
  1860. if (!f.type.match('image.*')) {
  1861. imgShow = Unibase.Platform.Connect.Components.Chat.Instance().getfileThumbnail(a);
  1862. reader.onload = (function (theFile) {
  1863. return function (e) {
  1864. Unibase.Platform.Connect.Components.Chat.Instance().renderthumbnail(imgShow);
  1865. };
  1866. })(f);
  1867. reader.readAsDataURL(f);
  1868. }
  1869. else {
  1870. reader.onload = (function (theFile) {
  1871. return function (e) {
  1872. Chat.messagetype = Unibase.Platform.Connect.Enums.MessageType.Image;
  1873. Unibase.Platform.Connect.Components.Chat.Instance().renderthumbnail(e.target.result);
  1874. };
  1875. })(f);
  1876. reader.readAsDataURL(f);
  1877. }
  1878. }
  1879. Unibase.Platform.Connect.Components.Chat.Instance().uploadFile();
  1880. }
  1881. document.getElementById('chat_attachments').addEventListener('change', this.LoadAttachments, false);
  1882. }
  1883. uploadFile() {
  1884. let fileUpload = $(".fileUpload").get(0);
  1885. var files = fileUpload.files;
  1886. if (files.length > 0) {
  1887. for (var i = 0; i < files.length; i++) {
  1888. Chat.itemid++;
  1889. let file = files[i];
  1890. var item = { Files: file, Index: Chat.itemid };
  1891. Chat.attachments.push(item);
  1892. $("#input_msg_send_chatapp").focus();
  1893. if (Chat.attachments.length > 0) {
  1894. $('#icon_send').removeClass('hidden');
  1895. $('#recordaudio').addClass('hidden');
  1896. }
  1897. }
  1898. }
  1899. }
  1900. renderthumbnail(imgshow) {
  1901. Chat.fileitems++;
  1902. var span = '<div class="imagethumbnail_' + Chat.fileitems + '"><span class="thumb-span attached_files_"' + Chat.fileitems + '"" > ' +
  1903. '<img class="thumb loadimg d-40 img-fluid" id="loadedFiles_' + Chat.fileitems + '" src="' + imgshow + '" onerror="ReloadImage(event)" data-dynamic="1"/>' +
  1904. '<a href="javascript:;" class="btn btn-icon btn-icon-circle btn-primary remove-btn"><span class="btn-icon-wrap"><i class="las la-times font-12" href="javascript:;" onclick ="Unibase.Platform.Connect.Components.Chat.Instance().removeFile(\'' + Chat.fileitems + '\'); " id="remove_file__' + Chat.fileitems + '"></i></span></a></span></div>';
  1905. $('#quoteMsgWrap').addClass('hidden');
  1906. $('.div_selected_files').append(span).removeClass('hidden');
  1907. $("#input_msg_send_chatapp").focus();
  1908. $('#icon_send').removeClass('hidden');
  1909. $('#recordaudio').addClass('hidden');
  1910. }
  1911. removeFile(index) {
  1912. $('.imagethumbnail_' + index).remove();
  1913. Chat.attachments = Chat.attachments.filter(x => x.Index != index);
  1914. if (Chat.attachments.length == 0) {
  1915. $('#icon_send').addClass('hidden');
  1916. $('#recordaudio').removeClass('hidden');
  1917. $('.fileUpload').val('');
  1918. }
  1919. }
  1920. GetFilePath(filepath) {
  1921. filepath.split("\\").join("//");
  1922. filepath = filepath.replace('wwwroot', '');
  1923. if (filepath.startsWith("/")) {
  1924. var path = filepath.split("/");
  1925. filepath = filepath.replace("/" + path[1], path[1]);
  1926. }
  1927. return filepath;
  1928. }
  1929. downloadfile(filepath, chatid) {
  1930. if (!isMobileApp()) {
  1931. filepath = Chat.Instance().getFilePath(filepath);
  1932. $(".downloadfiles_" + chatid).attr("href", filepath).click();
  1933. }
  1934. else {
  1935. Unibase.Platform.Helpers.MobileHelper.Instance().downloadFile(filepath);
  1936. }
  1937. }
  1938. filePreview(path) {
  1939. path = _appsettings.server_url() + "/" + path;
  1940. window.open(path, '');
  1941. }
  1942. changeProfileImage(event) {
  1943. let oldPhotoUrl = Chat.Instance().getContactInfo(0, Chat.chatGroupId).photoUrl;
  1944. let user = Chat.currentUser;
  1945. if (event.files != null) {
  1946. var files = event.files[0];
  1947. var name = event.files[0].name;
  1948. var filedata = new FormData();
  1949. filedata.append(name, files);
  1950. const url = _appsettings.server_url() + '/apis/uniconnect/chats/ProfileChange/chatgroupid/' + Chat.chatGroupId;
  1951. $.ajax({
  1952. url: url,
  1953. type: "POST",
  1954. data: filedata,
  1955. contentType: false,
  1956. processData: false,
  1957. beforeSend: function (xhr) {
  1958. if (user !== undefined && user !== null) {
  1959. xhr.setRequestHeader('Authorization', 'Basic ' + user.sessionId);
  1960. xhr.setRequestHeader('geoposition', user.latd + ':' + user.lgId);
  1961. }
  1962. },
  1963. success: function (response) {
  1964. console.log(response.message);
  1965. Chat.attachments = [];
  1966. var newPhotoUrl = response.result;
  1967. Unibase.Platform.Connect.Components.Chat.Instance().groupDetails(Unibase.Platform.Connect.Enums.GroupMessageType.ChangeProfilePic, oldPhotoUrl, newPhotoUrl, 0);
  1968. Chat.Instance().updateProfile(response.result, Chat.chatGroupId);
  1969. },
  1970. error: function (error) {
  1971. console.log(error);
  1972. alert("failed to Update profile");
  1973. }
  1974. });
  1975. }
  1976. }
  1977. sendmessage(msg) {
  1978. var message = $('#input_msg_send_chatapp').val().toString();
  1979. if (msg != undefined) {
  1980. if (msg.indexOf('blob') != -1) {
  1981. message = msg;
  1982. }
  1983. ;
  1984. }
  1985. var val = message.trim();
  1986. if (val != '') {
  1987. message = message.replace(/</g, '&lt').replace(/>/g, '&gt');
  1988. var messageType;
  1989. var Touserid = Number($('#private_id').val());
  1990. let req = new Unibase.Platform.Connect.Requests.Chat();
  1991. req.ChatGroupId = Unibase.Platform.Connect.Components.Chat.chatGroupId;
  1992. req.ToUserId = Touserid;
  1993. req.FromUserId = Chat.currentUser.userId;
  1994. req.Message = message;
  1995. messageType = Unibase.Platform.Connect.Enums.MessageType.Text;
  1996. if (message.includes('https/') || message.includes('www.'))
  1997. messageType = Unibase.Platform.Connect.Enums.MessageType.Url;
  1998. req.MessageType = messageType;
  1999. if ($('.quotemessage_' + Chat.chatGroupId).text() != "") {
  2000. let index = Unibase.Platform.Connect.Components.Chat.chatlistarray.findIndex(x => x.chatId == Chat.chatid);
  2001. var quotedfiles = Chat.chatlistarray[index].filePath;
  2002. if (quotedfiles != null) {
  2003. req.QuotedMessage = Chat.chatlistarray[index].filePath;
  2004. req.FileType = Chat.chatlistarray[index].fileType;
  2005. Chat.chatid = 0;
  2006. }
  2007. else {
  2008. var html = Chat.chatlistarray[index].message + '<div style="font-size:10px">' + Chat.chatlistarray[index].fromUserName + '</div>';
  2009. req.QuotedMessage = html;
  2010. }
  2011. }
  2012. this._chatmanager.saveChat(req).then(function (response) {
  2013. if (response.status == Unibase.Data.Status.Success) {
  2014. Unibase.Platform.Connect.Components.Chat.chatlistarray.push(response.result);
  2015. Chat.Instance().newMessage(response.result);
  2016. var contactinfo = Chat.Instance().getContactInfo(Chat.contactId, Chat.chatGroupId);
  2017. if (contactinfo != undefined) {
  2018. Chat.chatGroupId = response.result.chatGroupId;
  2019. var packet = Chat.Instance().reqToClientMessagePacket(response.result);
  2020. packet.isPrivate = contactinfo.isPrivate;
  2021. packet.toUserPhotoUrl = contactinfo.photoUrl;
  2022. packet.fromUserName = contactinfo.contactName;
  2023. packet.fromUserId = contactinfo.contactId;
  2024. packet.messageSentDate = response.result.messageSentDate;
  2025. Chat.Instance().newChat(packet);
  2026. }
  2027. $(`.user-last-chat_${Chat.chatGroupId}`).text(response.result.message);
  2028. }
  2029. });
  2030. }
  2031. }
  2032. newMessage(packet) {
  2033. var messagedate = moment.utc(packet.messageSentDate).format("MM-DD-YYYY");
  2034. var html = '';
  2035. if ($('#date_' + messagedate).length == 0) {
  2036. html += Chat.Instance().getMessageDate(messagedate);
  2037. }
  2038. html += Chat.Instance().loadconversation(packet, true);
  2039. $('.messageslist').append(html);
  2040. let lastelement = $('.chat-message-wrap').last();
  2041. if (lastelement[0] != undefined)
  2042. lastelement[0].scrollIntoView();
  2043. }
  2044. sendfiles() {
  2045. var message = $('#input_msg_send_chatapp').val();
  2046. Chat.fileitems = 0;
  2047. Chat.itemid = 0;
  2048. var count = 0;
  2049. var messageType = Chat.messagetype;
  2050. $('#chat_attachments').prop("value", null);
  2051. var Touserid = Number($('#private_id').val());
  2052. var fileData = new FormData();
  2053. fileData.append(message.toString(), 'msg');
  2054. for (var i = 0; i < Chat.attachments.length; i++) {
  2055. var files = Chat.attachments[i].Files;
  2056. if (files.size <= 300000000) {
  2057. fileData.append(files.name, files);
  2058. count++;
  2059. }
  2060. else {
  2061. alert("Cannot Upload File More Than 300MB");
  2062. return;
  2063. }
  2064. }
  2065. if (message == "") {
  2066. message = null;
  2067. }
  2068. for (var i = 0; i < Chat.attachments.length; i++) {
  2069. Unibase.Platform.Connect.Components.Chat.Instance().filetemplate(Chat.attachments[i].Files);
  2070. }
  2071. if (count == 0 && Chat.attachments.length != 0) {
  2072. $('.div_selected_files').html('');
  2073. return;
  2074. }
  2075. const url = _appsettings.server_url() + '/apis/uniconnect/Chats/savechatattachments/touserid/' + Touserid + '/chatgroupid/' + Chat.chatGroupId + '/messagetype/' + messageType + '/fromusername/' + Chat.currentUser.name;
  2076. $.ajax({
  2077. url: url,
  2078. type: "POST",
  2079. data: fileData,
  2080. contentType: false,
  2081. processData: false,
  2082. beforeSend: function (xhr) {
  2083. if (Chat.currentUser.userId !== undefined && Chat.currentUser.userId !== null) {
  2084. xhr.setRequestHeader('Authorization', 'Basic ' + Chat.currentUser.sessionId);
  2085. xhr.setRequestHeader('geoposition', Chat.currentUser.latd + ':' + Chat.currentUser.lgId);
  2086. }
  2087. },
  2088. success: function (response) {
  2089. console.log(response.Message);
  2090. Chat.attachments = [];
  2091. Chat.messagetype = 1;
  2092. $('.div_selected_files').html('');
  2093. if (response.result != null) {
  2094. $('.chat-messages_temp').remove();
  2095. for (let i = 0; i < response.result.length; i++) {
  2096. Chat.Instance().newMessage(response.result[i]);
  2097. }
  2098. if (Chat.chatGroupId == 0) {
  2099. var contactinfoindex = Chat.contacts.findIndex(x => x.contactId == Chat.contactId);
  2100. if (contactinfoindex != -1) {
  2101. Chat.chatGroupId = response.result.chatGroupId;
  2102. Chat.contacts[contactinfoindex].chatGroupId = response.result[0].chatGroupId;
  2103. var clientresponse = response.result[response.result.length - 1];
  2104. var packet = Chat.Instance().reqToClientMessagePacket(clientresponse);
  2105. packet.isPrivate = true;
  2106. packet.toUserPhotoUrl = Chat.contacts[contactinfoindex].photoUrl;
  2107. packet.fromUserName = Chat.contacts[contactinfoindex].contactName;
  2108. packet.fromUserId = Chat.contacts[contactinfoindex].contactId;
  2109. Chat.Instance().newChat(packet);
  2110. }
  2111. }
  2112. else {
  2113. $('#input_msg_send_chatapp').focus();
  2114. }
  2115. for (let i = 0; i < response.result.length; i++) {
  2116. Chat.Instance().updateMessageStatus(response.result[i].chatId);
  2117. }
  2118. }
  2119. },
  2120. error: function (error) {
  2121. console.log(error);
  2122. $('.uploading-icon').addClass('hidden');
  2123. $('.error-icon').removeClass('hidden');
  2124. $('.div_selected_files').html('');
  2125. }
  2126. });
  2127. }
  2128. reqToServerMessagePacket(response) {
  2129. let _packet = new Unibase.Platform.Connect.Server.Packets.MessageDetails();
  2130. _packet.ChatGroupId = response.chatGroupId;
  2131. _packet.FromUserId = response.fromUserId;
  2132. _packet.ToUserId = response.toUserId;
  2133. _packet.CreatedDate = response.createdDate;
  2134. _packet.Message = response.message;
  2135. _packet.LastSeen = response.lastSeen;
  2136. _packet.FromUserName = response.fromUserName;
  2137. _packet.ChatId = response.chatId;
  2138. _packet.MessageStatusId = response.messageStatusId;
  2139. _packet.MessageDeliveredDate = response.messageDeliveredDate;
  2140. _packet.MessageReadDate = response.messageReadDate;
  2141. _packet.StatusId = response.statusId;
  2142. _packet.CreatedBy = response.createdBy;
  2143. _packet.FilePath = response.filePath;
  2144. _packet.FileName = response.fileName;
  2145. _packet.FileType = response.fileType;
  2146. _packet.CommentChatId = response.commentChatId;
  2147. _packet.QuotedMessage = response.quotedMessage;
  2148. _packet.TempId = response.tempId;
  2149. _packet.MessageType = response.messageType;
  2150. _packet.SessionId = Chat.currentUser.sessionId;
  2151. _packet.MessageSentDate = response.messageSentDate;
  2152. _packet.Users = response.users;
  2153. _packet.RecievedUsers = response.recievedUsers;
  2154. _packet.ReadUsers = response.readUsers;
  2155. _packet.ClearChatFor = response.clearChatFor;
  2156. _packet.IsDelete = response.isDelete;
  2157. _packet.IsEdit = response.isEdit;
  2158. _packet.DeliveredBy = response.deliveredBy;
  2159. _packet.ReadBy = response.readBy;
  2160. _packet.GroupMessageType = response.groupMessageType;
  2161. _packet.IsPrivate = response.isPrivate;
  2162. return _packet;
  2163. }
  2164. reqToClientMessagePacket(response) {
  2165. let _packet = new Unibase.Platform.Connect.Client.Packets.MessageDetails();
  2166. _packet.chatGroupId = response.chatGroupId;
  2167. _packet.fromUserId = response.fromUserId;
  2168. _packet.toUserId = response.toUserId;
  2169. _packet.createdDate = response.createdDate;
  2170. _packet.message = response.message;
  2171. _packet.lastSeen = response.lastSeen;
  2172. _packet.fromUserName = response.fromUserName;
  2173. _packet.chatId = response.chatId;
  2174. _packet.messageStatusId = response.messageStatusId;
  2175. _packet.messageDeliveredDate = response.messageDeliveredDate;
  2176. _packet.messageReadDate = response.messageReadDate;
  2177. _packet.statusId = response.statusId;
  2178. _packet.createdBy = response.createdBy;
  2179. _packet.filePath = response.filePath;
  2180. _packet.fileName = response.fileName;
  2181. _packet.fileType = response.fileType;
  2182. _packet.commentChatId = response.commentChatId;
  2183. _packet.quotedMessage = response.quotedMessage;
  2184. _packet.tempId = response.tempId;
  2185. _packet.messageType = response.messageType;
  2186. _packet.messageSentDate = response.messageSentDate;
  2187. _packet.users = response.users;
  2188. _packet.recievedUsers = response.recievedUsers;
  2189. _packet.readUsers = response.readUsers;
  2190. _packet.clearChatFor = response.clearChatFor;
  2191. _packet.isDelete = response.isDelete;
  2192. _packet.isEdit = response.isEdit;
  2193. _packet.deliveredBy = response.deliveredBy;
  2194. _packet.readBy = response.readBy;
  2195. _packet.groupMessageType = response.groupMessageType;
  2196. _packet.isPrivate = response.isPrivate;
  2197. return _packet;
  2198. }
  2199. updateAdminStatus(recipientId, isAdmin) {
  2200. var contactname = Chat.contacts.find(x => x.contactId == recipientId).contactName;
  2201. var text = isAdmin ? "make " : "remove ";
  2202. var method = isAdmin ? 'Unibase.Platform.Connect.Components.Chat.Instance().makeAdmin(' + recipientId + ',' + Chat.chatGroupId + ')' : 'Unibase.Platform.Connect.Components.Chat.Instance().removeAdmin(' + recipientId + ',' + Chat.chatGroupId + ')';
  2203. Chat.Instance().chatPopup({
  2204. message: 'Do you want to ' + text + contactname + ' as admin ?',
  2205. buttons: {
  2206. confirm: {
  2207. label: text + " admin",
  2208. },
  2209. cancel: {
  2210. label: 'Cancel'
  2211. }
  2212. },
  2213. callback: (result) => {
  2214. if (result) {
  2215. Unibase.Platform.Connect.Managers.ChatManager.Instance().updateAdminStatus(Chat.chatGroupId, recipientId, isAdmin).then(function (response) {
  2216. if (response.status == Unibase.Data.Status.Success) {
  2217. if (isAdmin) {
  2218. Unibase.Platform.Connect.Components.Chat.Instance().groupDetails(Unibase.Platform.Connect.Enums.GroupMessageType.MakeAdmin, null, null, recipientId);
  2219. }
  2220. else {
  2221. Unibase.Platform.Connect.Components.Chat.Instance().groupDetails(Unibase.Platform.Connect.Enums.GroupMessageType.RemoveAdmin, null, null, recipientId);
  2222. }
  2223. eval(method);
  2224. }
  2225. });
  2226. }
  2227. }
  2228. });
  2229. }
  2230. createnewgroup() {
  2231. const instance = this;
  2232. const newgrphtml = instance._chatTemplate.getNewGroupTemplate();
  2233. $('.CreateNewChatGroup').html(newgrphtml);
  2234. $('#newGroupSection').removeClass('hidden');
  2235. $('#chatsContactsSection').addClass('hidden');
  2236. Chat.routes.push('create-group');
  2237. instance.loadgroupcontacts();
  2238. }
  2239. addNewParticipants() {
  2240. const instance = this;
  2241. var RecipientId;
  2242. let contacts = Chat.Instance().getContacts();
  2243. var html = "";
  2244. var photourl;
  2245. Chat.groupcontacts = [];
  2246. if (contacts.length) {
  2247. $('.Notify-Chat-AddParticipants').html('<li class="list-group-item text-center text-dark">Loading...</li>').removeClass('hidden');
  2248. for (let i = 0; i < contacts.length; i++) {
  2249. var match = false;
  2250. for (let j = 0; j < Chat.grpdetails.length; j++) {
  2251. if (contacts[i].photoUrl == "" || contacts[i].photoUrl == null) {
  2252. photourl = "";
  2253. }
  2254. if (contacts[i].contactId == Chat.grpdetails[j].recipientId && !Chat.grpdetails[j].isBlock) {
  2255. match = true;
  2256. }
  2257. }
  2258. if (match == false) {
  2259. const addhtml = instance._chatTemplate.getAddParticipants(contacts[i].contactId, contacts[i].contactName);
  2260. html += addhtml;
  2261. }
  2262. }
  2263. $('.Notify-Chat-AddParticipants').html(html);
  2264. }
  2265. const contactsLength = Chat.groupcontacts.length;
  2266. if (contactsLength != 0) {
  2267. Chat.groupcontacts.forEach(contact => {
  2268. $(".checkuser_" + contact.RecipientId).prop('checked', true);
  2269. });
  2270. instance.appendSelectedGroupParticipants();
  2271. }
  2272. $("input[name='selected_participants']").click(function (e) {
  2273. e.stopPropagation();
  2274. $('.btn_saveGroup').removeClass('hidden');
  2275. if (!$(this).is(":checked")) {
  2276. RecipientId = +$(this).val();
  2277. Chat.groupcontacts = Chat.groupcontacts.filter(x => x.RecipientId != RecipientId);
  2278. if (Chat.groupcontacts.length == 0) {
  2279. $('.participant_avatar').html('').addClass('hidden');
  2280. }
  2281. }
  2282. else {
  2283. RecipientId = +$(this).val();
  2284. var req = new Unibase.Platform.Connect.Requests.ChatRecipient();
  2285. req.RecipientId = RecipientId;
  2286. Chat.groupcontacts.push(req);
  2287. }
  2288. instance.appendSelectedGroupParticipants();
  2289. });
  2290. $('.Notify-Chat-AddParticipants .groupuser').click(function () {
  2291. $(this).find("input[name='selected_participants']").trigger('click');
  2292. });
  2293. }
  2294. groupname() {
  2295. if ($(".btn_saveGroup").hasClass("hidden")) {
  2296. $(".btn_saveGroup").removeClass("hidden");
  2297. }
  2298. }
  2299. appendSelectedGroupParticipants() {
  2300. const instance = this;
  2301. const contactLength = Chat.groupcontacts.length;
  2302. if (contactLength <= 2) {
  2303. const avatarHtml = Chat.groupcontacts.map(contact => {
  2304. var contactinfo = Chat.contacts.find(x => x.contactId == contact.RecipientId);
  2305. return instance._chatTemplate.getUserAvatarHtml(contactinfo);
  2306. }).join('');
  2307. $('.participant_avatar').html(avatarHtml).removeClass('hidden');
  2308. }
  2309. else {
  2310. if (!$('.slectedparticipants-count').length) {
  2311. $('.participant_avatar').append(`<div class="media-img-wrap avatar avatar-sm slectedparticipants-count"><span class="avatar-text avatar-text-primary rounded-circle"><span class="initial-wrap"><span class="selectedParticipants"></span></span></span></div>`);
  2312. }
  2313. $(".selectedParticipants").text(`+${contactLength - 2}`);
  2314. }
  2315. $(".countChatAddParticipants").text(contactLength);
  2316. }
  2317. changeGroupName() {
  2318. const groupname = $('.edit_groupdetailsInput').val().toString();
  2319. const prevGroupName = $('.edit_groupdetailsInput').attr('data-prevvalue');
  2320. if (groupname !== prevGroupName) {
  2321. Unibase.Platform.Connect.Managers.ChatManager.Instance().changeGroupName(Chat.chatGroupId, groupname).then(function (response) {
  2322. if (response.status == Unibase.Data.Status.Success) {
  2323. Unibase.Platform.Connect.Components.Chat.Instance().groupDetails(Unibase.Platform.Connect.Enums.GroupMessageType.ChangeGroupName, null, null, 0);
  2324. Chat.recentChats.find(x => x.chatGroupId == Chat.chatGroupId).contactName = groupname;
  2325. $(".grpname_" + Chat.chatGroupId).text(groupname);
  2326. $('.edit_groupdetailsInput').val(groupname);
  2327. }
  2328. });
  2329. }
  2330. $('.edit_grpdetails').removeClass('hidden');
  2331. $('#userProfileInfo').find('.Profile_name').text(groupname).removeClass('hidden');
  2332. $('#editGroupInputWrap').addClass('hidden');
  2333. $('.close_details').addClass('hidden');
  2334. $('.group_name').addClass('hidden');
  2335. $('.grpname_' + Chat.chatGroupId).text(groupname);
  2336. }
  2337. Savegroup() {
  2338. if (Chat.groupcontacts.length == 0) {
  2339. $(".btn_saveGroup").addClass("hidden");
  2340. alert("Please Select contacts");
  2341. return false;
  2342. }
  2343. let reqgrp = new Unibase.Platform.Connect.Requests.ChatGroup();
  2344. var newgroup = false;
  2345. $(".btn_saveGroup").removeClass("hidden");
  2346. let user = Chat.currentUser;
  2347. let groupuser = new Unibase.Platform.Connect.Requests.ChatRecipient();
  2348. if (Chat.chatGroupId != 0) {
  2349. reqgrp.GroupName = Chat.grpdetails[0].groupName;
  2350. $('.prevcontactname').val(reqgrp.GroupName);
  2351. }
  2352. if (Chat.chatGroupId == 0) {
  2353. reqgrp.GroupName = $("#txt_GroupName").val().toString();
  2354. if (reqgrp.GroupName == "" || reqgrp.GroupName == null) {
  2355. $(".btn_saveGroup").addClass("hidden");
  2356. alert("Please Enter GroupName");
  2357. return false;
  2358. }
  2359. groupuser.RecipientId = user.userId;
  2360. groupuser.IsAdmin = true;
  2361. groupuser.StatusId = 1;
  2362. Chat.groupcontacts.push(groupuser);
  2363. reqgrp.IsPrivate = false;
  2364. newgroup = true;
  2365. $('.prevcontactname').val(reqgrp.GroupName);
  2366. }
  2367. reqgrp.ChatGroupId = Chat.chatGroupId;
  2368. reqgrp.Users = Chat.groupcontacts;
  2369. Unibase.Platform.Connect.Managers.ChatManager.Instance().saveChatGroup(reqgrp).then(function (response) {
  2370. if (response.status == Unibase.Data.Status.Success) {
  2371. Chat.chatGroupId = response.result.chatGroupId;
  2372. Unibase.Platform.Connect.Managers.ChatManager.Instance().getChatRecipientsByGroupId(Chat.chatGroupId).then(function (response) {
  2373. Chat.grpdetails = response.result;
  2374. if (newgroup) {
  2375. Unibase.Platform.Connect.Components.Chat.Instance().groupDetails(Unibase.Platform.Connect.Enums.GroupMessageType.CreateGroup, null, null, 0);
  2376. Unibase.Platform.Connect.Components.Chat.Instance().groupDetails(Unibase.Platform.Connect.Enums.GroupMessageType.AddParticipants, null, null, 0);
  2377. $('#chatsContactsSection').removeClass('hidden');
  2378. $('#newGroupSection').addClass('hidden');
  2379. $(".chatapp-users-list").removeClass("hidden");
  2380. $(".div_ContactsList").addClass("hidden");
  2381. $('._btncomment').addClass('active');
  2382. $('._btnDisplayUser').removeClass('active');
  2383. }
  2384. else {
  2385. Unibase.Platform.Connect.Components.Chat.Instance().groupDetails(Unibase.Platform.Connect.Enums.GroupMessageType.AddParticipants, null, null, 0);
  2386. $('.user-profile-info').removeClass('hidden');
  2387. $('.div-Chat-AddParticipants').addClass('hidden');
  2388. $('.div-Chat-Participants').removeClass('hidden');
  2389. $('.star-messages-links').removeClass('hidden');
  2390. $('.profile-media-link').removeClass('hidden');
  2391. $('.profile-action-div').removeClass('hidden');
  2392. $('.btn_AddChatParticipants').removeClass('hidden');
  2393. $('#btn_addtoGrpName').addClass('hidden');
  2394. $('.user-profile-info,.group-info-header').removeClass('hidden');
  2395. $('.div-Chat-AddParticipants,.add-participants-header').addClass('hidden');
  2396. Unibase.Platform.Connect.Components.Chat.Instance().participantsList(Chat.grpdetails);
  2397. Unibase.Platform.Connect.Components.Chatter.Instance().addParticipants(Chat.grpdetails);
  2398. $(Chat.visibleProfileEl).removeClass('hidden');
  2399. }
  2400. });
  2401. }
  2402. });
  2403. $('.participant_avatar').html('').addClass('hidden');
  2404. $('.Search_participants').addClass('hidden');
  2405. $('.div-Chat-AddParticipants').addClass('hidden');
  2406. }
  2407. groupDetails(groupMessageType, oldPhotoUrl, newPhotoUrl, toUserId) {
  2408. let user = Chat.currentUser;
  2409. var contactinfo = Chat.contacts.find(x => x.contactId == toUserId);
  2410. var message;
  2411. if (groupMessageType == Unibase.Platform.Connect.Enums.GroupMessageType.CreateGroup) {
  2412. message = user.name + " " + "created group" + " " + Chat.grpdetails[0].groupName;
  2413. Unibase.Platform.Connect.Components.Chat.Instance().sendGroupDetails(0, groupMessageType, message);
  2414. }
  2415. else if (groupMessageType == Unibase.Platform.Connect.Enums.GroupMessageType.AddParticipants) {
  2416. Chat.groupcontacts = Chat.groupcontacts.filter(x => x.RecipientId != Chat.currentUser.userId);
  2417. for (let i = 0; i < Chat.groupcontacts.length; i++) {
  2418. var contactinfo = Chat.contacts.find(x => x.contactId == Chat.groupcontacts[i].RecipientId);
  2419. if (contactinfo != undefined) {
  2420. message = user.name + " " + "added" + " " + contactinfo.contactName;
  2421. Unibase.Platform.Connect.Components.Chat.Instance().sendGroupDetails(Chat.grpdetails[i].recipientId, groupMessageType, message);
  2422. }
  2423. }
  2424. }
  2425. else if (groupMessageType == Unibase.Platform.Connect.Enums.GroupMessageType.RemoveParticipants) {
  2426. message = user.name + " " + "removed" + " " + contactinfo.contactName;
  2427. Unibase.Platform.Connect.Components.Chat.Instance().sendGroupDetails(toUserId, groupMessageType, message);
  2428. }
  2429. else if (groupMessageType == Unibase.Platform.Connect.Enums.GroupMessageType.MakeAdmin) {
  2430. message = user.name + " " + "make " + contactinfo.contactName + " " + "as an admin";
  2431. Unibase.Platform.Connect.Components.Chat.Instance().sendGroupDetails(contactinfo.contactId, groupMessageType, message);
  2432. }
  2433. else if (groupMessageType == Unibase.Platform.Connect.Enums.GroupMessageType.RemoveAdmin) {
  2434. message = user.name + " " + "removed " + contactinfo.contactName + " " + "as an admin";
  2435. Unibase.Platform.Connect.Components.Chat.Instance().sendGroupDetails(contactinfo.contactId, groupMessageType, message);
  2436. }
  2437. else if (groupMessageType == Unibase.Platform.Connect.Enums.GroupMessageType.ChangeGroupName) {
  2438. message = user.name + " " + "Changed Groupname" + " " + "";
  2439. Unibase.Platform.Connect.Components.Chat.Instance().sendGroupDetails(0, groupMessageType, message);
  2440. }
  2441. else if (groupMessageType == Unibase.Platform.Connect.Enums.GroupMessageType.ChangeProfilePic) {
  2442. message = user.name + " " + "changed profile image" + "," + oldPhotoUrl + "|" + newPhotoUrl;
  2443. Unibase.Platform.Connect.Components.Chat.Instance().sendGroupDetails(0, groupMessageType, message);
  2444. }
  2445. else if (groupMessageType == Unibase.Platform.Connect.Enums.GroupMessageType.RemoveProfilePic) {
  2446. }
  2447. else if (groupMessageType == Unibase.Platform.Connect.Enums.GroupMessageType.ExitGroup) {
  2448. message = user.name + " " + "left the Group" + " " + Chat.grpdetails[0].groupName;
  2449. Unibase.Platform.Connect.Components.Chat.Instance().sendGroupDetails(0, groupMessageType, message);
  2450. }
  2451. }
  2452. sendGroupDetails(toUserId, grpMessageType, message) {
  2453. let user = Chat.currentUser;
  2454. let req = new Unibase.Platform.Connect.Requests.Chat();
  2455. req.ChatGroupId = Chat.chatGroupId;
  2456. req.Message = message;
  2457. req.GroupMessageType = grpMessageType;
  2458. req.FromUserId = user.userId;
  2459. req.ToUserId = toUserId;
  2460. this._chatmanager.saveChat(req).then(function (response) {
  2461. if (response.status == Unibase.Data.Status.Success) {
  2462. Unibase.Platform.Connect.Components.Chat.chatlistarray.push(response.result);
  2463. var grpinfo = Chat.recentChats.find(x => x.chatGroupId == Chat.chatGroupId);
  2464. if (grpinfo == undefined) {
  2465. var packet = Chat.Instance().reqToClientMessagePacket(response.result);
  2466. packet.groupName = $('.prevcontactname').val().toString();
  2467. packet.isPrivate = false;
  2468. packet.fromUserId = 0;
  2469. packet.message = '';
  2470. Chat.Instance().newChat(packet);
  2471. }
  2472. else {
  2473. Chat.Instance().newMessage(response.result);
  2474. }
  2475. }
  2476. });
  2477. }
  2478. removeGroupParticipant(contactid) {
  2479. var contactname = Chat.contacts.find(x => x.contactId == contactid).contactName;
  2480. var chatgrpinfo = Chat.recentChats.find(x => x.chatGroupId == Chat.chatGroupId);
  2481. Chat.Instance().chatPopup({
  2482. message: "Remove " + contactname + " from " + chatgrpinfo.contactName + " group?",
  2483. buttons: {
  2484. confirm: {
  2485. label: "Remove",
  2486. },
  2487. cancel: {
  2488. label: 'Cancel'
  2489. }
  2490. },
  2491. callback: (result) => {
  2492. if (result) {
  2493. Unibase.Platform.Connect.Components.Chat.Instance().groupDetails(Unibase.Platform.Connect.Enums.GroupMessageType.RemoveParticipants, null, null, contactid);
  2494. Unibase.Platform.Connect.Managers.ChatManager.Instance().RemoveParticipant(Chat.chatGroupId, contactid).then(function (response) {
  2495. if (response.status == Unibase.Data.Status.Success) {
  2496. $('#groupParticipantUser_' + contactid).remove();
  2497. var participantcount = Number($('.countChatParticipants').text());
  2498. $('.countChatParticipants').text(participantcount - 1);
  2499. $('.partipant-count').text(participantcount - 1 + " participants");
  2500. $('.lastseen_0').text(participantcount - 1 + " participants");
  2501. Chat.grpdetails.find(x => x.recipientId == contactid).isBlock = true;
  2502. }
  2503. });
  2504. }
  2505. }
  2506. });
  2507. }
  2508. exitGroup() {
  2509. var chatgrpinfo = Chat.recentChats.find(x => x.chatGroupId == Chat.chatGroupId);
  2510. Chat.Instance().chatPopup({
  2511. message: "Exit " + chatgrpinfo.contactName + " group ?",
  2512. buttons: {
  2513. confirm: {
  2514. label: 'Exit',
  2515. },
  2516. cancel: {
  2517. label: 'Cancel'
  2518. }
  2519. },
  2520. callback: (result) => {
  2521. if (result) {
  2522. Unibase.Platform.Connect.Components.Chat.Instance().groupDetails(Unibase.Platform.Connect.Enums.GroupMessageType.ExitGroup, null, null, 0);
  2523. let userid = Chat.currentUser.userId;
  2524. Unibase.Platform.Connect.Managers.ChatManager.Instance().RemoveParticipant(Chat.chatGroupId, userid).then(function (response) {
  2525. if (response.status == Unibase.Data.Status.Success) {
  2526. $('#groupParticipantUser_' + Chat.currentUser.userId).remove();
  2527. $('.ExitFromGroup').addClass('hidden');
  2528. alert("You left the group");
  2529. if ($('.isadmin_true').length == 0) {
  2530. var element = $('.isadmin_false').get(0);
  2531. var contactId = Number($(element).find('.dotsicon').attr('data-contactId'));
  2532. Unibase.Platform.Connect.Managers.ChatManager.Instance().updateAdminStatus(Chat.chatGroupId, contactId, true);
  2533. }
  2534. $('.btn_AddChatParticipants').addClass('hidden');
  2535. Chat.recentChats.find(x => x.chatGroupId == Chat.chatGroupId).isBlock = true;
  2536. $('#chatFooter').addClass('hidden');
  2537. $('.remove_template').removeClass('hidden');
  2538. $('.Profile_image').attr("onchange", "javascript:;");
  2539. $('.save_changes').attr("onclick", "javascript:;");
  2540. $('.edit_grpdetails').attr("onclick", "javascript:;");
  2541. $('.user-last-chat_' + Chat.chatGroupId).removeClass('hidden');
  2542. $('.typing_active_' + Chat.chatGroupId).addClass('hidden').text('');
  2543. $('.typing_active_' + Chat.chatGroupId).attr('data-typingcontacts', '');
  2544. }
  2545. });
  2546. }
  2547. }
  2548. });
  2549. }
  2550. clearChat() {
  2551. this.chatPopup({
  2552. message: "Are you sure you want to clear messages in this chat?",
  2553. buttons: {
  2554. confirm: {
  2555. label: 'Clear',
  2556. className: 'btn btn-primary'
  2557. },
  2558. cancel: {
  2559. label: 'Cancel',
  2560. className: 'btn btn-outline-danger'
  2561. }
  2562. },
  2563. callback: function (result) {
  2564. if (result) {
  2565. let userid = Chat.currentUser.userId;
  2566. Unibase.Platform.Connect.Managers.ChatManager.Instance().clearChat(Chat.chatGroupId, userid).then(function (response) {
  2567. if (response.status == Unibase.Data.Status.Success) {
  2568. $('.messageslist').html('');
  2569. $('.more_msg').addClass('d-none');
  2570. $('.chat_down').addClass('hidden');
  2571. }
  2572. });
  2573. }
  2574. }
  2575. });
  2576. }
  2577. EnableVedio(packet) {
  2578. alert(packet.userName + "video enabled");
  2579. }
  2580. openvideo() {
  2581. let user = Chat.currentUser;
  2582. let _packet = new Unibase.Platform.Connect.Server.Packets.Typing();
  2583. _packet.FromUserId = user.userId;
  2584. _packet.UserName = user.name;
  2585. _packet.ToUserId = Number($('#private_id').val());
  2586. Unibase.Platform.Connect.Components.Chat.instance._chatter.openvideo(_packet);
  2587. }
  2588. profileDetails(type) {
  2589. const instance = this;
  2590. $(".profiledetails").removeClass("hidden");
  2591. $(".Search_participants").addClass('hidden');
  2592. Chat.profiledetailswindow = true;
  2593. Chat.privatewindow = false;
  2594. Chat.chatwindow = false;
  2595. const html = instance._chatTemplate.getProfileTemplate();
  2596. if (Chat.isFullScreen) {
  2597. $('#fullScreenModalContent').html(html);
  2598. $('#fullScreenModal').modal();
  2599. }
  2600. else {
  2601. $('#profileDetailsSection').html(html);
  2602. $("#chatConvoBody").addClass('hidden');
  2603. }
  2604. Chat.routes.push('profile-details');
  2605. instance.profileheader();
  2606. const profilebody = instance._chatTemplate.getprofilebody();
  2607. $('.profileDetails').html(profilebody);
  2608. Chat.Instance().getMediaCount();
  2609. if (!Chat.isPrivate) {
  2610. $('.blockUser').addClass('hidden');
  2611. $('.div-Chat-Groups').addClass('hidden');
  2612. $('.div-Chat-Participants').removeClass('hidden');
  2613. $('.Notify-Chat-Participants').removeClass('hidden');
  2614. $('#userInfoSection').addClass('hidden');
  2615. if (!Chat.isBlock) {
  2616. $('.ExitFromGroup,.div-Chat-Block').removeClass('hidden');
  2617. }
  2618. this.groupParticipants();
  2619. }
  2620. else {
  2621. $('.div-Chat-Participants').addClass('hidden');
  2622. $('.ExitFromGroup').addClass('hiden');
  2623. if (Chat.isBlock) {
  2624. $('.blkbtn-text').text('Unblock User');
  2625. }
  2626. $('.div-Chat-Groups').removeClass('hidden');
  2627. $('.btn_AddChatParticipants').addClass('hidden');
  2628. $('#userInfoSection').removeClass('hidden');
  2629. if (type === 'personal') {
  2630. $('#chatsContactsSection,#profileMediaLink,#starMessagesLink').addClass('hidden');
  2631. $('#profileDetailsSection').addClass('personal-profile');
  2632. this.getCurrentUserGroups();
  2633. }
  2634. else {
  2635. $('.blockUser').removeClass('hidden');
  2636. this.commongroups(Chat.contactId);
  2637. }
  2638. }
  2639. $('.star-messages-count').text(instance.getStarMessagesCount());
  2640. $('#profileMediaLink').click(function () {
  2641. $('#profileHeader,#profileDetailsWrap').addClass('hidden');
  2642. $('#mediaHeader,#profileMediaWrap').removeClass('hidden');
  2643. Chat.routes.push('profile-media');
  2644. instance.mediaFiles();
  2645. $('.div-Chat-Media').addClass('active');
  2646. });
  2647. $('.profile-media-tabs .nav-link').click(function () {
  2648. $('.profile-media-tabs .active').removeClass('active');
  2649. $(this).addClass('active');
  2650. var mediatype = $(this).attr('data-mediatype');
  2651. });
  2652. }
  2653. mediaFiles() {
  2654. const instance = this;
  2655. $('#Chat-Mediafiles').removeClass('tab-pane fade');
  2656. $('#Chat-docfiles,#links_files').addClass('tab-pane fade');
  2657. $('.countMediaFiles').removeClass('hidden');
  2658. $('.linkCount').addClass('hidden');
  2659. $('.countDocFiles').addClass('hidden');
  2660. var MediaFiles = Chat.mediadoclinks.filter(x => x.messageType == 6 || x.messageType == 7 || x.messageType == 8);
  2661. if (MediaFiles.length != 0) {
  2662. var imageshow;
  2663. $("#Chat-Media").html('');
  2664. var count = 0;
  2665. for (let i = 0; i < MediaFiles.length; i++) {
  2666. var messagedate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateFirst(MediaFiles[i].messageSentDate);
  2667. const formattedDate = moment(messagedate).format('DD-MM-YYYY');
  2668. if (!$(`#mediaByDate_${formattedDate}`).length) {
  2669. $("#Chat-Media").append(`<div class="media-by-date" id="mediaByDate_${formattedDate}"><div class="media_date text-dark mb-10 font-12 font-weight-500">${messagedate}</div><div class="d-flex gap-15 media-files" style="flex-wrap: wrap;"></div></div>`);
  2670. }
  2671. if (MediaFiles[i].fileType == null) {
  2672. continue;
  2673. }
  2674. if (MediaFiles[i].fileType.match('image.*')) {
  2675. imageshow = MediaFiles[i].filePath;
  2676. }
  2677. else {
  2678. imageshow = Unibase.Platform.Connect.Components.Chat.Instance().getfileThumbnail(MediaFiles[i].fileType);
  2679. }
  2680. const mediaHtml = instance._chatTemplate.getMediaFiles(MediaFiles[i].filePath, imageshow);
  2681. $(`#mediaByDate_${formattedDate} .media-files`).append(mediaHtml);
  2682. count++;
  2683. }
  2684. $(".countMediaFiles").text(count);
  2685. }
  2686. }
  2687. links() {
  2688. const instance = this;
  2689. $('.countMediaFiles').addClass('hidden');
  2690. $('.linkCount').removeClass('hidden');
  2691. $('.countDocFiles').addClass('hidden');
  2692. $('#links_files').removeClass('tab-pane fade');
  2693. $('#Chat-Mediafiles,#Chat-docfiles').addClass('tab-pane fade');
  2694. var count = 0;
  2695. var links = Chat.mediadoclinks.filter(x => x.messageType == 3);
  2696. if (links.length != 0) {
  2697. $('#Chat-Links').html('');
  2698. for (let i = 0; i < links.length; i++) {
  2699. var messagedate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateFirst(links[i].messageSentDate);
  2700. const formattedDate = moment(messagedate).format('DD-MM-YYYY');
  2701. if (!$(`#linksByDate_${formattedDate}`).length) {
  2702. $('#Chat-Links').append(`<div class="links-by-date" id="linksByDate_${formattedDate}"><div class="link_date text-dark mb-10 font-12 font-weight-500">${messagedate}</div><div class="d-flex flex-column r-gap-10 link-files"></div></div>`);
  2703. }
  2704. const linkHtml = instance._chatTemplate.getLinks(links[i].message);
  2705. $(`#linksByDate_${formattedDate} .link-files`).append(linkHtml);
  2706. count++;
  2707. }
  2708. $('.linkCount').text(count);
  2709. }
  2710. }
  2711. documentFiles() {
  2712. const instance = this;
  2713. $('#Chat-docfiles').removeClass('tab-pane fade');
  2714. $('#links_files,#Chat-Mediafiles').addClass('tab-pane fade');
  2715. $('.countMediaFiles').addClass('hidden');
  2716. $('.linkCount').addClass('hidden');
  2717. $('.countDocFiles').removeClass('hidden');
  2718. var docFiles = Chat.mediadoclinks.filter(x => x.messageType == 4 || x.messageType == 5 || x.messageType == 9);
  2719. if (docFiles.length != 0) {
  2720. $('#Chat-Docs').html('');
  2721. var imageshow;
  2722. var count = 0;
  2723. for (let i = 0; i < docFiles.length; i++) {
  2724. var messagedate = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocalDateFirst(docFiles[i].messageSentDate);
  2725. const formattedDate = moment(messagedate).format('DD-MM-YYYY');
  2726. if (!$(`#documentsByDate_${formattedDate}`).length) {
  2727. $("#Chat-Docs").append(`<div class="documents-by-date" id="documentsByDate_${formattedDate}"><div class="document_date text-dark mb-10 font-12 font-weight-500">${messagedate}</div><div class="d-flex gap-10 document-files" style="flex-wrap: wrap;"></div></div>`);
  2728. }
  2729. if (docFiles[i].fileType != null) {
  2730. if (docFiles[i].fileType.includes('audio') || docFiles[i].fileType.includes('video')) {
  2731. imageshow = Unibase.Platform.Connect.Components.Chat.Instance().getfileThumbnail(docFiles[i].fileType);
  2732. }
  2733. else {
  2734. imageshow = Unibase.Platform.Connect.Components.Chat.Instance().getfileThumbnail(docFiles[i].fileName.substring(docFiles[i].fileName.lastIndexOf('.') + 1));
  2735. }
  2736. }
  2737. const documentHtml = instance._chatTemplate.getMediaFiles(docFiles[i].filePath, imageshow);
  2738. $(`#documentsByDate_${formattedDate} .document-files`).append(documentHtml);
  2739. count++;
  2740. }
  2741. $('.countDocFiles').text(count);
  2742. }
  2743. }
  2744. updateProfile(filepath, chatgroupid) {
  2745. filepath = Chat.Instance().getFilePath(filepath);
  2746. if ($('.ImagePng_' + chatgroupid).find('.chatuser-img').length == 0) {
  2747. $('.ImagePng_' + chatgroupid).find('.avatar-text').remove();
  2748. $('.ImagePng_' + chatgroupid).append('<img src=' + filepath + ' class="avatar-img chatuser-img">');
  2749. }
  2750. else {
  2751. $('.ImagePng_' + chatgroupid).find('.chatuser-img').attr('src', filepath);
  2752. }
  2753. var index = Chat.recentChats.findIndex(x => x.chatGroupId == chatgroupid);
  2754. if (index != -1) {
  2755. Chat.recentChats[index].photoUrl = filepath;
  2756. }
  2757. }
  2758. getFilePath(filepath) {
  2759. if (!filepath.startsWith('http')) {
  2760. filepath = Chat.Instance().getAppUrl() + filepath;
  2761. }
  2762. return filepath;
  2763. }
  2764. updateGroupName(groupName, chatgroupid) {
  2765. $(".grpname_" + chatgroupid).text(groupName);
  2766. }
  2767. commongroups(contactid) {
  2768. const instance = this;
  2769. var html = "";
  2770. var count = 0;
  2771. Unibase.Platform.Connect.Managers.ChatManager.Instance().getChatgroups(contactid).then(function (response) {
  2772. var groups = response.result;
  2773. for (let i = 0; i < groups.length; i++) {
  2774. const grhtml = instance._chatTemplate.getgroupsbycid(groups[i].groupName);
  2775. html += grhtml;
  2776. count++;
  2777. }
  2778. $('.Chat-Chat-Group').html(html).removeClass('hidden');
  2779. $('.countChatGroups').text(count);
  2780. });
  2781. }
  2782. getCurrentUserGroups() {
  2783. const instance = this;
  2784. var html = "";
  2785. var count = 0;
  2786. var groups = Chat.recentChats.filter(chat => chat.isPrivate === false);
  2787. for (let i = 0; i < groups.length; i++) {
  2788. const grhtml = instance._chatTemplate.getgroupsbycid(groups[i].groupName);
  2789. html += grhtml;
  2790. count++;
  2791. }
  2792. $('.Chat-Chat-Group').html(html).removeClass('hidden');
  2793. $('.countChatGroups').text(count);
  2794. }
  2795. OnPrivateWindowOpened(chatGroupId) {
  2796. if (Chat.chatGroupId == chatGroupId) {
  2797. Unibase.Platform.Connect.Managers.ChatManager.Instance().getChatsByGroupId(Chat.chatGroupId).then(function (response) {
  2798. Unibase.Platform.Connect.Components.Chat.chatlistarray = response.result;
  2799. Chat.Instance().updateBulkMessages();
  2800. });
  2801. }
  2802. }
  2803. updateBulkMessages() {
  2804. $('.messageslist').find('.fromuserlist').each(function () {
  2805. var id = $(this).attr('data-chatid');
  2806. if (!Chat.isPrivate && Chat.chatlistarray.find(x => x.chatId == id).messageDeliveredDate != null) {
  2807. Chat.Instance().updateMessageStatus(id);
  2808. }
  2809. else if (Chat.isPrivate) {
  2810. Chat.Instance().updateMessageStatus(id);
  2811. }
  2812. });
  2813. }
  2814. updateMessageStatus(chatId) {
  2815. var chatInfo = Chat.chatlistarray.find(x => x.chatId == chatId);
  2816. if (chatInfo != undefined) {
  2817. if (chatInfo.messageReadDate != null) {
  2818. $('.chat-messages_' + chatInfo.chatId).find('.msg_status').removeClass('msg-status-delivery').addClass('msg-status').html('<i class="zmdi zmdi-check-all"></i>');
  2819. }
  2820. else {
  2821. $('.chat-messages_' + chatInfo.chatId).find('.msg_status').removeClass('msg-status').addClass('msg-status-delivery').html('<i class="zmdi zmdi-check-all"></i>');
  2822. }
  2823. $('.chat-messages_' + chatInfo.chatId).find('.info').removeClass('hidden');
  2824. }
  2825. }
  2826. AddParticipants() {
  2827. $('.group-info-header').addClass('hidden');
  2828. $('.add-participants-header').removeClass('hidden');
  2829. Chat.visibleProfileEl = $('#profileDetailsWrap').children(':visible');
  2830. $('.div-Chat-AddParticipants').removeClass('hidden').siblings().addClass('hidden');
  2831. $('.Search_participants').removeClass('hidden');
  2832. $('#profileTabContent').addClass('hidden');
  2833. $('.btn_saveGroup').removeClass('hidden');
  2834. $('.input-search').removeClass('hidden');
  2835. $('#Chat-docfiles,#links_files,#Chat-Mediafiles').addClass('tab-pane fade');
  2836. Chat.routes.push('add-participants');
  2837. $('#txtSearchParticipants').val('');
  2838. $('.participant_avatar').html('');
  2839. $('.countChatAddParticipants').text(0);
  2840. this.addNewParticipants();
  2841. }
  2842. closeprivatewindow() {
  2843. const instance = this;
  2844. $('#chatConvoBody').addClass('hidden');
  2845. $('#chatsContactsSection').removeClass('hidden');
  2846. $('.morediv').attr("data-isfirst", 'true');
  2847. $('.morediv').attr("data-moreindex", '0');
  2848. $(".chatapp-users-list").removeClass("hidden");
  2849. $(".div_ContactsList").addClass("hidden");
  2850. $('._btncomment').addClass('active');
  2851. $('._btnDisplayUser').removeClass('active');
  2852. Chat.Instance().draftMessage();
  2853. $('.more_msg').addClass('d-none');
  2854. $('#input_msg_send_chatapp').val('');
  2855. $('#txtSearchChats').val('');
  2856. $('.typing').addClass('hidden');
  2857. $("#Chat-Media").html('');
  2858. Chat.fileitems = 0;
  2859. Chat.groupcontacts = [];
  2860. Chat.attachments = [];
  2861. $('#icon_send').addClass('hidden');
  2862. $('#chatEmojis').addClass('hidden');
  2863. $('.messageslist,.div_selected_files,#quoteMsgWrap').html('');
  2864. $('#quoteMsgWrap').addClass('hidden');
  2865. let user = Chat.currentUser;
  2866. let _packet = new Unibase.Platform.Connect.Server.Packets.Connect();
  2867. _packet.UserId = user.userId;
  2868. _packet.UserName = user.name;
  2869. _packet.ActiveChatGroupId = 0;
  2870. _packet.SessionId = user.sessionId;
  2871. _packet.UnibaseId = user.unibaseId;
  2872. instance._chatter.updateActiveChatGroup(_packet, null);
  2873. $('#cam_pic').length && instance.closecam();
  2874. Chat.Instance().displayRecentChats();
  2875. }
  2876. closechatgroup() {
  2877. Chat.groupcontacts = [];
  2878. $('#chatsContactsSection').removeClass('hidden');
  2879. $('#newGroupSection').addClass('hidden');
  2880. }
  2881. EditgroupDetails(groupname) {
  2882. $('#userProfileInfo').find('.Profile_name,.edit_grpdetails').addClass('hidden');
  2883. $('.edit_groupdetailsInput').val(groupname);
  2884. $('#editGroupInputWrap').removeClass('hidden');
  2885. $('.close_details').removeClass('hidden');
  2886. $(".new-group").html('');
  2887. $('.group_name').removeClass('hidden');
  2888. }
  2889. ConnectCall(ChatGroupId, ContactId, ContactName) {
  2890. let user = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  2891. let _packet = new Unibase.Platform.Connect.Server.Packets.Conference();
  2892. _packet.ChatGroupId = Number(ChatGroupId);
  2893. _packet.FromUserId = Number(user.userId);
  2894. _packet.FromUserName = user.name;
  2895. _packet.ToUserId = Number(ContactId);
  2896. _packet.ToUserName = ContactName;
  2897. _packet.SessionId = user.sessionId;
  2898. Unibase.Platform.Connect.Components.Chat.instance._chatter.EnableAudio(_packet, null);
  2899. }
  2900. ConnectVedio(ChatGroupId, ContactId, ContactName) {
  2901. let user = Unibase.Platform.Membership.Infos.Identity.getCurrentUser();
  2902. let _packet = new Unibase.Platform.Connect.Server.Packets.Conference();
  2903. _packet.ChatGroupId = Number(ChatGroupId);
  2904. _packet.FromUserId = Number(user.userId);
  2905. _packet.FromUserName = user.name;
  2906. _packet.ToUserId = Number(ContactId);
  2907. _packet.ToUserName = ContactName;
  2908. _packet.SessionId = user.sessionId;
  2909. Unibase.Platform.Connect.Components.Chat.instance._chatter.EnableVedio(_packet, null);
  2910. }
  2911. EnableMeeting(MeetingId, UserId) {
  2912. var url = 'https://meet.bizgaze.com/lobby/' + MeetingId + '/' + UserId;
  2913. window.open(url, '');
  2914. }
  2915. copyscreen(event) {
  2916. if (event.clipboardData.files.length > 0) {
  2917. var src;
  2918. var files = event.clipboardData.files[0];
  2919. Chat.itemid++;
  2920. var item = { Files: files, Index: Chat.itemid };
  2921. Chat.attachments.push(item);
  2922. var reader = new FileReader();
  2923. reader.addEventListener("load", function () {
  2924. src = reader.result;
  2925. Chat.messagetype = Unibase.Platform.Connect.Enums.MessageType.Video;
  2926. Unibase.Platform.Connect.Components.Chat.Instance().renderthumbnail(src);
  2927. });
  2928. reader.readAsDataURL(files);
  2929. }
  2930. }
  2931. send() {
  2932. if (Chat.isBlock) {
  2933. Chat.Instance().BlockAlert();
  2934. return;
  2935. }
  2936. if (Chat.attachments.length > 0) {
  2937. Unibase.Platform.Connect.Components.Chat.Instance().sendfiles();
  2938. }
  2939. else {
  2940. Unibase.Platform.Connect.Components.Chat.Instance().sendmessage();
  2941. }
  2942. $('#input_msg_send_chatapp').val('').removeAttr('style');
  2943. $('#quoteMsgWrap').html('').addClass('hidden');
  2944. $('#icon_send').addClass('hidden');
  2945. }
  2946. onlinestatus(userid, onlinestatus) {
  2947. if (onlinestatus) {
  2948. if (Chat.privatewindow && Chat.isPrivate == true && Chat.contactId == userid) {
  2949. $('.lastseen_' + userid).text("Online");
  2950. Chat.Instance().updateBulkMessages();
  2951. }
  2952. else {
  2953. $(`#contact_badge_${userid}`).addClass('active');
  2954. Chat.connectedusers.push(userid);
  2955. }
  2956. }
  2957. else {
  2958. $(`#contact_badge_${userid}`).removeClass('active');
  2959. var lastseen = Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocal(new Date());
  2960. $('.lastseen_' + userid).text(lastseen).attr('data-lastseen', new Date().toISOString());
  2961. Chat.recentChats.find(x => x.contactId == userid).lastSeen = new Date().toISOString();
  2962. Chat.connectedusers = Chat.connectedusers.filter(x => x != userid);
  2963. }
  2964. }
  2965. getMediaCount() {
  2966. Unibase.Platform.Connect.Managers.ChatManager.Instance().getMediaCount(Chat.chatGroupId).then(function (response) {
  2967. if (response.result != null) {
  2968. $('.media-links-count').text(response.result.length);
  2969. Chat.mediadoclinks = response.result;
  2970. }
  2971. });
  2972. }
  2973. updatestatus() {
  2974. if (Chat.connectedusers.length > 0) {
  2975. for (let i = 0; i < Chat.connectedusers.length; i++) {
  2976. $(`#contact_badge_${Chat.connectedusers[i]}`).addClass('active');
  2977. $('.lastseen_' + Chat.connectedusers[i]).text("Online");
  2978. }
  2979. }
  2980. }
  2981. voicemsg() {
  2982. const chunks = [];
  2983. var recorder, gumStream;
  2984. $('.record_div').removeClass('hidden');
  2985. const second = 1000;
  2986. var minute = second * 60;
  2987. var hour = minute * 60;
  2988. let countDown = new Date().getTime(), x = setInterval(function () {
  2989. let now = new Date().getTime(), distance = now - countDown;
  2990. document.getElementById('minutes').innerText = Math.floor((distance % (hour)) / (minute)).toString(),
  2991. document.getElementById('seconds').innerText = Math.floor((distance % (minute)) / second).toString();
  2992. }, second);
  2993. navigator.mediaDevices.getUserMedia({
  2994. audio: true
  2995. }).then(function (stream) {
  2996. gumStream = stream;
  2997. recorder.ondataavailable = function (e) {
  2998. chunks.push(e.data);
  2999. let blob = new Blob(chunks, { type: 'audio/webm' });
  3000. var reader = new FileReader();
  3001. reader.addEventListener("load", function () {
  3002. var audiofile = Chat.Instance().dataURLtoFile(reader.result, Chat.Instance().getUniqueAudioName());
  3003. var item = {
  3004. Files: audiofile,
  3005. Index: Chat.attachments.length
  3006. };
  3007. Chat.attachments.push(item);
  3008. Chat.Instance().sendfiles();
  3009. }, false);
  3010. reader.readAsDataURL(blob);
  3011. };
  3012. recorder.start();
  3013. });
  3014. $('.voicemsg-send-btn').click(function () {
  3015. document.getElementById('minutes').innerText = '0';
  3016. document.getElementById('seconds').innerText = '0';
  3017. $('.record_div').addClass('hidden');
  3018. if (recorder.state != 'inactive') {
  3019. recorder.stop();
  3020. gumStream.getAudioTracks()[0].stop();
  3021. }
  3022. clearInterval(x);
  3023. });
  3024. }
  3025. webcam() {
  3026. const instance = this;
  3027. var constraints = {
  3028. video: true
  3029. };
  3030. var html = instance._chatTemplate.getWebCamHtml();
  3031. $('.webcam').html(html).removeClass('hidden');
  3032. var camera = document.getElementById('cam_pic');
  3033. navigator.mediaDevices.getUserMedia(constraints).then(function (stream) {
  3034. camera.srcObject = stream;
  3035. Chat.streamdata = stream;
  3036. }).catch(function (err) {
  3037. let message = err.message;
  3038. if (err.name === 'NotReadableError') {
  3039. message = 'It looks like another app using the camera already.';
  3040. }
  3041. $('#cam_pic,#camerControls').addClass('hidden');
  3042. $('#camErrMsg').html(message).removeClass('hidden');
  3043. });
  3044. }
  3045. webcampicture() {
  3046. $('.cam_hidden').addClass('hidden');
  3047. $('.canvas_hidden').removeClass('hidden');
  3048. $('.back_cam').removeClass('d-none');
  3049. $('.send_pic').removeClass('d-none');
  3050. var photo = document.getElementById('cam_image');
  3051. var canvas = document.getElementById('chat_size');
  3052. var video = document.getElementById('cam_pic');
  3053. var context = canvas.getContext('2d');
  3054. context.drawImage(video, 0, 0, canvas.width, canvas.height);
  3055. var data = canvas.toDataURL('image/png');
  3056. photo.setAttribute('src', data);
  3057. }
  3058. getUniqueFileName() {
  3059. var date = new Date().getTime();
  3060. var uuid = 'xxxxxxxx'.replace(/[xy]/g, function (c) {
  3061. var r = (date + Math.random() * 16) % 16 | 0;
  3062. date = Math.floor(date / 16);
  3063. return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
  3064. });
  3065. return uuid + "-image.png";
  3066. }
  3067. getUniqueAudioName() {
  3068. var date = new Date().getTime();
  3069. var uuid = 'xxxxxxxx'.replace(/[xy]/g, function (c) {
  3070. var r = (date + Math.random() * 16) % 16 | 0;
  3071. date = Math.floor(date / 16);
  3072. return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
  3073. });
  3074. return uuid + "-voicemsg.webm";
  3075. }
  3076. webcamimage() {
  3077. var data = $('#cam_image').get(0);
  3078. data = data.currentSrc;
  3079. var filedata = Chat.Instance().dataURLtoFile(data, Chat.Instance().getUniqueFileName());
  3080. this.renderthumbnail(data);
  3081. var len = Chat.attachments.length;
  3082. var item = { Files: filedata, Index: len };
  3083. Chat.attachments.push(item);
  3084. this.closecam();
  3085. Chat.messagetype = 8;
  3086. }
  3087. dataURLtoFile(dataurl, filename) {
  3088. var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
  3089. while (n--) {
  3090. u8arr[n] = bstr.charCodeAt(n);
  3091. }
  3092. return new File([u8arr], filename, { type: mime });
  3093. }
  3094. back_tocam() {
  3095. $('.cam_hidden').removeClass('hidden');
  3096. $('.canvas_hidden').addClass('hidden');
  3097. $('.back_cam').addClass('d-none');
  3098. $('.send_pic').addClass('d-none');
  3099. var camera = document.getElementById('cam_pic');
  3100. camera.srcObject = Chat.streamdata;
  3101. }
  3102. closecam() {
  3103. var camera = document.getElementById('cam_pic');
  3104. if (Chat.streamdata) {
  3105. Chat.streamdata.getTracks().forEach(function (track) {
  3106. track.stop();
  3107. camera.srcObject = null;
  3108. });
  3109. }
  3110. $('.webcam').html('').addClass('hidden');
  3111. }
  3112. status(users) {
  3113. Chat.connectedusers = [];
  3114. Chat.connectedusers = users;
  3115. }
  3116. loadEmojiCategories() {
  3117. const instance = this;
  3118. const emojiEl = $('#chatEmojis');
  3119. const emojiCategories = [128512, 128070, 127871, 128273, 127801, 128002, 128640, 9742, 9881];
  3120. const html = `<div class="emojis-wrap"><div class="tab-content emojis-tab-content mt-0 biz-bg-hightlight-color_10 biz-custom-scrollbar" id="emojiTabContent"></div><ul class="nav nav-tabs justify-content-between emoji-cat-tabs border-0 biz-bg-hightlight-color_20" id="emojiCategoryTabs" role="tablist"></ul></div>`;
  3121. emojiEl.html(html);
  3122. $('#emojiTabContent').html('');
  3123. const emojiCategoriesHtml = emojiCategories.map((cat) => {
  3124. return `<li class="nav-item"><a href="javascript:;" class="nav-link emoji-cat" id="emojiCat_${cat}" data-toggle="tab" data-target="#categoryEmojis_${cat}" role="tab" onclick="Unibase.Platform.Connect.Components.Chat.Instance().loadCategoryEmojis(${cat});">&#${cat}</a></li>`;
  3125. }).join('');
  3126. instance.loadCategoryEmojis(128512);
  3127. $('#emojiCategoryTabs').html(emojiCategoriesHtml);
  3128. emojiEl.find('.emoji-cat:first,.tab-pane:first').addClass('show active');
  3129. }
  3130. loadCategoryEmojis(code) {
  3131. if (!$(`#categoryEmojis_${code}`).length) {
  3132. let html = `<div class="tab-pane fade" id="categoryEmojis_${code}" role="tabpanel"><div class="emojis-content d-flex flex-wrap">`;
  3133. for (let i = 1; i <= 75; i++) {
  3134. html += `<a class="emoji-icon" id="emoji_${code}" onclick="Unibase.Platform.Connect.Components.Chat.Instance().appendEmojiToChatInput('&#${code}');">&#${code}</a>`;
  3135. code++;
  3136. }
  3137. html = `${html}</div></div>`;
  3138. $('#emojiTabContent').append(html);
  3139. }
  3140. }
  3141. appendEmojiToChatInput(emojicode) {
  3142. var textVal = $('#input_msg_send_chatapp').val();
  3143. $('#input_msg_send_chatapp').val(textVal + '' + emojicode).focus();
  3144. $('#icon_send').removeClass('hidden');
  3145. $('#recordaudio').addClass('hidden');
  3146. let user = Chat.currentUser;
  3147. let _packet = new Unibase.Platform.Connect.Server.Packets.Typing();
  3148. _packet.FromUserId = user.userId;
  3149. _packet.UserName = user.name;
  3150. _packet.ToUserId = Number($('#private_id').val());
  3151. _packet.ChatGroupId = Chat.chatGroupId;
  3152. _packet.Isprivate = Chat.isPrivate;
  3153. _packet.SessionId = user.sessionId;
  3154. Unibase.Platform.Connect.Components.Chat.instance._chatter.onTyping(_packet, null);
  3155. }
  3156. chatPopup(config) {
  3157. let popUpHtml = '';
  3158. if (!jQuery.isEmptyObject(config)) {
  3159. const buttons = config.buttons;
  3160. popUpHtml += `<div class="modal fade chat-popup biz-custom-scrollbar" id="chatPopUp" ${!Chat.isFullScreen ? 'data-backdrop="false"' : ''}>
  3161. <div class="modal-dialog modal-dialog-centered" role="document">
  3162. <div class="modal-content">
  3163. ${config.message && `<div class="modal-body pa-10">
  3164. <div class="chat-popup-msg font-weight-500 text-dark">${config.message}</div>
  3165. </div>`}
  3166. ${config.buttons && `<div class="modal-footer pa-10">
  3167. <a href="javascript:;" class="${buttons.cancel.className || 'btn btn-outline-danger'} btn-sm cancel-btn" id="chatPopupCancelBtn">${buttons.cancel.label || 'Close'}</a>
  3168. <a href="javascript:;" class="${buttons.confirm.className || 'btn btn-primary'} btn-sm confirm-btn" id="chatPopupConfirmBtn">${buttons.confirm.label || 'Save'}</a>
  3169. </div>`}
  3170. </div>
  3171. </div>
  3172. </div>`;
  3173. popUpHtml += '<div class="modal-backdrop fade show position-absolute chat-popup-backdrop" id="chatPopupBackdrop"></div>';
  3174. $('#chatAppWrap').append(popUpHtml);
  3175. $('#chatPopUp').modal();
  3176. $('#chatPopUp').on('hidden.bs.modal', function () {
  3177. $('#chatPopUp,#chatPopupBackdrop').remove();
  3178. });
  3179. $('#chatPopUp').find('#chatPopupConfirmBtn,#chatPopupCancelBtn').click(function () {
  3180. if ($(this).hasClass('confirm-btn')) {
  3181. config.callback(true);
  3182. }
  3183. else {
  3184. config.callback(false);
  3185. }
  3186. $('#chatPopUp').modal('hide');
  3187. });
  3188. $('#chatPopupBackdrop').click(function () {
  3189. $('#chatPopUp').modal('hide');
  3190. });
  3191. }
  3192. }
  3193. getEmojiFontSize(msg) {
  3194. const instance = this;
  3195. let emojiFontSize = '';
  3196. const regexExp = /(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/gi;
  3197. if (regexExp.test(msg) && instance.isOnlyOneEmoji(msg)) {
  3198. emojiFontSize = 'font-25 line-height-10';
  3199. }
  3200. return emojiFontSize;
  3201. }
  3202. isOnlyOneEmoji(emoji) {
  3203. const emojiPattern = this._chatTemplate.getEmojiPattern();
  3204. return emojiPattern.test(emoji);
  3205. }
  3206. showProfileImgPreview() {
  3207. var contact;
  3208. if (Chat.isPrivate) {
  3209. contact = Chat.AllContacts.find(x => x.contactId == Chat.contactId);
  3210. }
  3211. else {
  3212. contact = Chat.AllContacts.find(x => x.chatGroupId == Chat.chatGroupId);
  3213. }
  3214. const popupHtml = `<div class="modal fade chat-img-preview-modal chat-popup panel-preview" id="chatImgPreviewModal" tabindex="-1" role="dialog" data-backdrop="false">
  3215. <div class="modal-dialog h-100 my-0" role="document">
  3216. <div class="modal-content h-100">
  3217. <div class="modal-body h-100">
  3218. <img src="${contact.photoUrl}" class="preview-img img-fluid" onerror="ReloadImage(event)" data-dynamic="1" data-loaded="0">
  3219. </div>
  3220. </div>
  3221. </div>
  3222. </div>
  3223. <div class="modal-backdrop fade show position-absolute" id="chatPopupBackdrop"></div>`;
  3224. $('#chatAppWrap').append(popupHtml);
  3225. $('#chatImgPreviewModal').modal();
  3226. $('#chatImgPreviewModal').on('hidden.bs.modal', function () {
  3227. $('#chatImgPreviewModal,#chatPopupBackdrop').remove();
  3228. });
  3229. $('#chatPopupBackdrop').click(function () {
  3230. $('#chatImgPreviewModal').modal('hide');
  3231. });
  3232. }
  3233. loadChatFullScreen() {
  3234. if (Chat.isFullScreen) {
  3235. $('#chatPanelBodyWrap').addClass('chat-fullscreen');
  3236. $('#profileDetailsSection').html('');
  3237. $('#chatConvoBody').removeClass('hidden');
  3238. $('#chatMsgHeader').addClass('biz-bg-hightlight-color_10');
  3239. if ($('.list-groupchat .contactuser').length) {
  3240. $('.list-groupchat .contactuser').first().trigger('click');
  3241. }
  3242. else {
  3243. $('#chatNoConvoMsgWrap').removeClass('hidden');
  3244. $('#chatConvoBody').addClass('hidden');
  3245. }
  3246. $('#chatFullScreenBtn').text('Exit Fullscreen');
  3247. $('#fullScreenModal').on('show.bs.modal', function () {
  3248. $('#fullScreenModalBackdrop').removeClass('hidden');
  3249. });
  3250. $('#fullScreenModal').on('hidden.bs.modal', function () {
  3251. $('#fullScreenModalContent').empty();
  3252. $('#fullScreenModalBackdrop').addClass('hidden');
  3253. });
  3254. }
  3255. }
  3256. toggleChatFullScreen() {
  3257. const instance = this;
  3258. if (Chat.isFullScreen) {
  3259. Chat.isFullScreen = false;
  3260. $('.chat-group-item.biz-bg-hightlight-color_20').removeClass('biz-bg-hightlight-color_20');
  3261. $('#chatFullScreenBtn').text('Fullscreen');
  3262. $('#chatConvoBody').addClass('hidden').detach().insertAfter('#chatsContactsSection');
  3263. $('#chatConvoSection,#chatFullScreenModalWrap').remove();
  3264. $('#chatPanelBodyWrap').removeClass('chat-fullscreen').detach().appendTo('.settings-panel-wrap');
  3265. }
  3266. else {
  3267. Chat.isFullScreen = true;
  3268. $('#profileDetailsSection').html('');
  3269. $('#chatPanelBodyWrap').addClass('chat-fullscreen').detach().appendTo('#bizgaze_body');
  3270. $('#chatAppWrap').append(instance._chatTemplate.getChatFullScreenHtml());
  3271. $('#chatConvoBody').removeClass('hidden').detach().appendTo('#chatConvoSection');
  3272. $('#chatMsgHeader').addClass('biz-bg-hightlight-color_10');
  3273. if ($('.list-groupchat .contactuser').length) {
  3274. $('.list-groupchat .contactuser').first().trigger('click');
  3275. }
  3276. else {
  3277. $('#chatNoConvoMsgWrap').removeClass('hidden');
  3278. $('#chatConvoBody').addClass('hidden');
  3279. }
  3280. $('#chatFullScreenBtn').text('Exit Fullscreen');
  3281. $('#fullScreenModal').on('show.bs.modal', function () {
  3282. $('#fullScreenModalBackdrop').removeClass('hidden');
  3283. });
  3284. $('#fullScreenModal').on('hidden.bs.modal', function () {
  3285. $('#fullScreenModalContent').empty();
  3286. $('#fullScreenModalBackdrop').addClass('hidden');
  3287. });
  3288. }
  3289. setTimeout(() => {
  3290. eval(`$('#chatAppWrap .simple-scroll-bar').each(function(i,e){new SimpleBar(e);});`);
  3291. }, 200);
  3292. }
  3293. refreshlastseen() {
  3294. if (Chat.isBlock) {
  3295. $('.lastseen_' + Chat.contactId).text('');
  3296. return;
  3297. }
  3298. var text = $('.lastseen_' + Chat.contactId).text();
  3299. if (text != "Online" && Chat.isPrivate) {
  3300. var lastseen = $('.lastseen_' + Chat.contactId).attr('data-lastseen') == '' ? '' : Unibase.Platform.Helpers.DateTimeHelper.Instance().formatLocal($('.lastseen_' + Chat.contactId).attr('data-lastseen'));
  3301. if (lastseen != 'Invalid date') {
  3302. $('.lastseen_' + Chat.contactId).text(lastseen);
  3303. }
  3304. }
  3305. }
  3306. highlightActiveChat() {
  3307. const activeChatId = $('#hfChats_chatGroupId').val();
  3308. $('.chat-group-item.biz-bg-hightlight-color_20').removeClass('biz-bg-hightlight-color_20');
  3309. $(`.chat-group-item.userChat_${activeChatId}`).addClass('biz-bg-hightlight-color_20');
  3310. }
  3311. loadgroupcontacts() {
  3312. const instance = this;
  3313. var RecipientId;
  3314. let contacts = Chat.Instance().getContacts().filter(x => x.contactId != this.currentUser.userId);
  3315. const newgrp = instance._chatTemplate.getGroupContactsTemplate(contacts);
  3316. $(".list-chatgroup").html(newgrp);
  3317. $("input[name='chatgroupuser']").click(function (e) {
  3318. e.stopPropagation();
  3319. $('.btn_saveGroup').removeClass('hidden');
  3320. if (!$(this).is(":checked")) {
  3321. RecipientId = Number($(this).val());
  3322. Chat.groupcontacts = Chat.groupcontacts.filter(x => x.RecipientId != RecipientId);
  3323. if (Chat.groupcontacts.length == 0) {
  3324. $(".btn_saveGroup").addClass("hidden");
  3325. }
  3326. }
  3327. else {
  3328. RecipientId = +$(this).val();
  3329. var req = new Unibase.Platform.Connect.Requests.ChatRecipient();
  3330. req.RecipientId = RecipientId;
  3331. Chat.groupcontacts.push(req);
  3332. }
  3333. instance.appendSelectedGroupParticipants();
  3334. });
  3335. $('.list-chatgroup .groupuser').click(function (e) {
  3336. $(this).find('input[name="chatgroupuser"]').trigger('click');
  3337. });
  3338. $('.list-chatgroup .chat-call-options').click(function (e) {
  3339. e.stopPropagation();
  3340. });
  3341. $('#clearGroupContactsSearch').click(function () {
  3342. $(this).addClass('hidden');
  3343. $('#txtSearchParticipants').val('').trigger('keyup');
  3344. });
  3345. }
  3346. forwardMessage(chatid) {
  3347. var isSelected = false;
  3348. let user = Chat.currentUser;
  3349. let index = Unibase.Platform.Connect.Components.Chat.chatlistarray.findIndex(x => x.chatId == chatid);
  3350. let req = new Unibase.Platform.Connect.Requests.Chat();
  3351. req.FileName = Chat.chatlistarray[index].fileName;
  3352. req.FilePath = Chat.chatlistarray[index].filePath;
  3353. req.FileType = Chat.chatlistarray[index].fileType;
  3354. req.ChatGroupId = 0;
  3355. req.FromUserId = user.userId;
  3356. req.Message = Chat.chatlistarray[index].message;
  3357. req.MessageType = Chat.chatlistarray[index].messageType;
  3358. $('input[name ="forwardcontact"]').each(function () {
  3359. if ($(this).is(':checked')) {
  3360. isSelected = true;
  3361. req.ToUserId = Number($(this).attr('data-contactid'));
  3362. req.ChatGroupId = Number($(this).attr('data-chatgroupid'));
  3363. Unibase.Platform.Connect.Managers.ChatManager.Instance().saveChat(req).then(function (response) {
  3364. if (response.result != null) {
  3365. MessageHelper.Instance().showSuccess("Successfully forwarded", "");
  3366. var packet = Chat.Instance().reqToClientMessagePacket(response.result);
  3367. var contactid = response.result.toUserId;
  3368. var id = contactid;
  3369. packet.isPrivate = true;
  3370. if (contactid == 0) {
  3371. packet.isPrivate = false;
  3372. id = response.result.chatGroupId;
  3373. }
  3374. var contactname = $('.frdid_' + id).attr('data-contactname');
  3375. var photoUrl = $('.frdid_' + id).attr('data-photourl');
  3376. packet.fromUserId = response.result.toUserId;
  3377. packet.chatGroupId = response.result.chatGroupId;
  3378. packet.fromUserName = contactname;
  3379. packet.messageSentDate = new Date();
  3380. packet.toUserPhotoUrl = photoUrl;
  3381. packet.lastSeen = '';
  3382. Chat.Instance().newChat(packet, true);
  3383. if (Chat.chatGroupId == response.result.chatGroupId && Chat.contactId == response.result.toUserId) {
  3384. packet.fromUserId = Chat.currentUser.userId;
  3385. Chat.Instance().newMessage(packet);
  3386. }
  3387. }
  3388. else {
  3389. alert("Failed to forward");
  3390. }
  3391. });
  3392. }
  3393. });
  3394. if (!isSelected) {
  3395. alert('Please select contacts');
  3396. return;
  3397. }
  3398. $('.forward-contacts-section').addClass('hidden');
  3399. $('.chat-convo-body').removeClass('hidden');
  3400. }
  3401. forwardContacts() {
  3402. const instance = this;
  3403. var contacts, html;
  3404. contacts = Chat.Instance().getContacts().filter(x => x.ContactId != Chat.currentUser.userId);
  3405. var groups = Chat.recentChats.filter(x => x.isPrivate == false);
  3406. var mergedContacts = contacts.concat(groups);
  3407. html = instance._chatTemplate.getForwardContacts(mergedContacts);
  3408. $('.forwardcontacts_list').html(html);
  3409. }
  3410. groupParticipants() {
  3411. Unibase.Platform.Connect.Managers.ChatManager.Instance().getChatRecipientsByGroupId(Chat.chatGroupId).then(function (response) {
  3412. Chat.grpdetails = response.result;
  3413. if (Chat.grpdetails != null) {
  3414. $('.Notify-Chat-Participants').html('');
  3415. Unibase.Platform.Connect.Components.Chat.Instance().participantsList(Chat.grpdetails);
  3416. }
  3417. });
  3418. }
  3419. participantsList(participants) {
  3420. var isleft = participants.find(x => x.recipientId == Chat.currentUser.userId).isBlock;
  3421. Chat.recentChats.find(x => x.chatGroupId == participants[0].chatGroupId).isBlock = isleft;
  3422. if (Chat.chatGroupId == participants[0].chatGroupId) {
  3423. Chat.grpdetails = participants;
  3424. participants = participants.filter(x => x.isBlock == false);
  3425. if (isleft) {
  3426. $('.ExitFromGroup').addClass('hidden');
  3427. $('#chatFooter').addClass('hidden');
  3428. $('.remove_template').removeClass('hidden');
  3429. }
  3430. else {
  3431. $('.ExitFromGroup').removeClass('hidden');
  3432. $('#chatFooter').removeClass('hidden');
  3433. $('.remove_template').addClass('hidden');
  3434. $('.lastseen_0').text(participants.length + " participants");
  3435. }
  3436. Chat.isBlock = isleft;
  3437. if (Chat.profiledetailswindow) {
  3438. const adminsort = participants.sort((a, b) => b.isAdmin - a.isAdmin);
  3439. for (let i = 0; i < adminsort.length; i++) {
  3440. if ($('.participant_' + adminsort[i].recipientId).length == 0) {
  3441. var html = Unibase.Platform.Connect.Components.ChatTemplate.Instance().getGroupParticipants(adminsort[i]);
  3442. $('.Notify-Chat-Participants').append(html);
  3443. }
  3444. else {
  3445. continue;
  3446. }
  3447. }
  3448. $('.countChatParticipants').text(adminsort.length);
  3449. }
  3450. $('.partipant-count').text(participants.length + " participants");
  3451. }
  3452. }
  3453. searchParticipants(searchClass, mainClass, defaultClass = '') {
  3454. var matchedCount = 0;
  3455. var searchTerm = $('.' + searchClass).val().toString().toLowerCase();
  3456. $('.' + mainClass).each(function () {
  3457. var contactname = $(this).attr('data-contactname').toLowerCase();
  3458. if (contactname.includes(searchTerm)) {
  3459. $(this).removeClass('hidden');
  3460. matchedCount++;
  3461. }
  3462. else {
  3463. $(this).addClass('hidden');
  3464. }
  3465. });
  3466. if (matchedCount == 0 && defaultClass != '') {
  3467. $('.' + defaultClass).removeClass('d-none');
  3468. }
  3469. }
  3470. nextAdmin() {
  3471. var isadminlogin = $('.participents_' + Chat.currentUser.userId).attr('data-isadmin') === 'true';
  3472. var contactid = Number($('.participents').find('.isadmin_false').first().attr('data-contactId'));
  3473. if (isadminlogin && contactid != 0) {
  3474. Unibase.Platform.Connect.Managers.ChatManager.Instance().updateAdminStatus(Chat.chatGroupId, contactid, true).then(function () {
  3475. $('.participant_' + contactid).attr('data-isadmin', 'true');
  3476. $('.contactname_' + contactid).html('<span class="badge badge-sm badge-soft-primary font-10 recipientbadge">Admin</span>');
  3477. });
  3478. }
  3479. }
  3480. adminOptions() {
  3481. var isAdminLogin = $('.participant_' + Chat.currentUser.userId).attr('data-isadmin') === 'true';
  3482. var data = event.currentTarget;
  3483. var isAdmin = $(data).attr('data-isadmin') === 'true';
  3484. var contactid = Number($(data).attr('data-contactid'));
  3485. var chatgroupid = Number($(data).attr('data-chatgroupid'));
  3486. var options = "";
  3487. if (isAdminLogin) {
  3488. options = '<a class="dropdown-item" href ="javascript:void(0);" id="remove_participants hidden" onclick="Unibase.Platform.Connect.Components.Chat.Instance().removeGroupParticipant(\'' + contactid + '\')"><span>Remove</span></a>';
  3489. if (!isAdmin) {
  3490. options += '<a class="dropdown-item" href ="javascript:void(0);" onclick="Unibase.Platform.Connect.Components.Chat.Instance().updateAdminStatus(\'' + contactid + '\',' + true + ')" id="make_admin"><span>Make Admin</span></a>';
  3491. }
  3492. else {
  3493. options += '<a class="dropdown-item" href ="javascript:void(0);" onclick="Unibase.Platform.Connect.Components.Chat.Instance().updateAdminStatus(\'' + contactid + '\',' + false + ')" id="remove_admin"><span>Remove Admin</span></a>';
  3494. }
  3495. }
  3496. options += `<a class="dropdown-item" href ="javascript:void(0);" data-contactId=${contactid} data-chatgroupid=${chatgroupid} onclick="Unibase.Platform.Connect.Components.Chat.Instance().privatewindow(${contactid})" id="msgConvoItem_${contactid}"><span>Send Message</span></a>`;
  3497. $(data).find('.grpoptionshtml').html(options);
  3498. }
  3499. displayRecentChats() {
  3500. var contacts = Chat.contacts.filter(x => x.contactId != Chat.currentUser.userId);
  3501. $('#chatHeaderNavTabs .active').removeClass('active');
  3502. $('._btncomment').addClass('active');
  3503. $('.chatapp-users-list').removeClass('hidden');
  3504. $('.div_ContactsList').addClass('hidden');
  3505. Chat.groupcontacts = [];
  3506. Chat.grpdetails = [];
  3507. var zerochats = Chat.recentChats.length == 0 ? "" : "hidden";
  3508. var html = `<li class='flex-center mt-4 defaultClass ${zerochats}'>No Chats found</li>`;
  3509. for (var i = 0; i < Chat.recentChats.length; i++) {
  3510. contacts = contacts.filter(x => x.contactId != Chat.recentChats[i].contactId);
  3511. }
  3512. var a = Chat.recentChats.filter(x => x.lastMessage == '').sort((a, b) => a.contactName.localeCompare(b.contactName));
  3513. var b = Chat.recentChats.filter(x => x.lastMessage != '');
  3514. const sortByDate = b => {
  3515. const sorter = (x, y) => {
  3516. return new Date(y.messageLastUpdatedDate).getTime() - new Date(x.messageLastUpdatedDate).getTime();
  3517. };
  3518. b.sort(sorter);
  3519. };
  3520. sortByDate(b);
  3521. var c = b.concat(a);
  3522. var allconatcts = c.concat(contacts);
  3523. Chat.AllContacts = c.concat(Chat.contacts);
  3524. for (let i = 0; i < allconatcts.length; i++) {
  3525. if (i == c.length) {
  3526. html += '<li class="flex-center mt-2 mr-200 defaultClass" style="font-weight:900;font-size:large">Contacts</li>';
  3527. }
  3528. ;
  3529. html += Chat.Instance()._chatTemplate.getRecentChatsTemplate(allconatcts[i]);
  3530. }
  3531. $('.list-groupchat').html(html);
  3532. Chat.Instance().updatestatus();
  3533. if (Chat.isFullScreen) {
  3534. if ($('.messageslist').is(':empty')) {
  3535. $('.list-groupchat .contactuser').first().trigger('click');
  3536. }
  3537. else {
  3538. this.highlightActiveChat();
  3539. }
  3540. }
  3541. }
  3542. getRecentChats() {
  3543. Unibase.Platform.Connect.Managers.ChatManager.Instance().getChats().then(function (response) {
  3544. if (response.result != null) {
  3545. Chat.recentChats = response.result;
  3546. Chat.Instance().displayRecentChats();
  3547. }
  3548. });
  3549. }
  3550. removeParticipants(recipientId, chatGroupId) {
  3551. if (Chat.currentUser.userId == recipientId) {
  3552. if (Chat.chatGroupId == chatGroupId) {
  3553. $('.ExitFromGroup').addClass('hidden');
  3554. $('#chatFooter').addClass('hidden');
  3555. $('.remove_template').removeClass('hidden');
  3556. $('.Profile_image').attr("onchange", "javascript:;");
  3557. $('.save_changes').attr("onclick", "javascript:;");
  3558. $('.edit_grpdetails').attr("onclick", "javascript:;");
  3559. $('.btn_AddChatParticipants').addClass('hidden');
  3560. $('.lastseen_0').text('');
  3561. $('.user-last-chat_' + Chat.chatGroupId).removeClass('hidden');
  3562. $('.typing_active_' + Chat.chatGroupId).addClass('hidden').text('');
  3563. $('.typing_active_' + Chat.chatGroupId).attr('data-typingcontacts', '');
  3564. }
  3565. var index = Chat.recentChats.findIndex(x => x.chatGroupId == chatGroupId);
  3566. if (index != -1) {
  3567. Chat.recentChats[index].isBlock = true;
  3568. }
  3569. Chat.isBlock = true;
  3570. }
  3571. var participantCount = Number($('.countChatParticipants').text());
  3572. $('.countChatParticipants').text(participantCount - 1);
  3573. $('#groupParticipantUser_' + recipientId).remove();
  3574. }
  3575. makeAdmin(RecipientId, chatGroupId) {
  3576. var style = "";
  3577. if (chatGroupId == Chat.chatGroupId) {
  3578. if (RecipientId == Chat.currentUser.userId) {
  3579. $('.participant_' + Chat.currentUser.userId).attr('data-isadmin', 'true');
  3580. $('.btn_AddChatParticipants').removeClass('hidden');
  3581. $().removeClass('hidden');
  3582. style = 'style="position:absolute;right:26px"';
  3583. }
  3584. else {
  3585. $('.fromParticipant_' + RecipientId).attr('data-isadmin', 'true');
  3586. }
  3587. $('.participant_' + RecipientId).removeClass('isadmin_false').addClass('isadmin_true');
  3588. $('#contactName_' + RecipientId).append('<span class="badge badge-sm badge-soft-primary font-10 recipientbadge" ' + style + '>Admin</span>');
  3589. }
  3590. }
  3591. removeAdmin(RecipientId, chatGroupId) {
  3592. if (Chat.chatGroupId == chatGroupId) {
  3593. if (Chat.currentUser.userId == RecipientId) {
  3594. $('.participant_' + Chat.currentUser.userId).attr('data-isadmin', 'false');
  3595. $('.btn_AddChatParticipants').addClass('hidden');
  3596. $('.btn_AddChatParticipants').addClass('hidden');
  3597. $('.Profile_image').attr("onchange", "javascript:;");
  3598. $('.save_changes').attr("onclick", "javascript:;");
  3599. $('.edit_grpdetails').attr("onclick", "javascript:;");
  3600. }
  3601. else {
  3602. $('.fromParticipant_' + RecipientId).attr('data-isadmin', 'false');
  3603. }
  3604. $('.participant_' + RecipientId).removeClass('isadmin_true').addClass('isadmin_false');
  3605. $('#contactName_' + RecipientId).find('.recipientbadge').remove();
  3606. }
  3607. }
  3608. addParticipants(chatGrpDetails) {
  3609. Unibase.Platform.Connect.Components.Chat.Instance().participantsList(chatGrpDetails);
  3610. }
  3611. onMessageReceived(packet) {
  3612. Unibase.Platform.Connect.Components.Chat.chatlistarray.push(packet);
  3613. if ((Chat.chatGroupId == packet.chatGroupId)) {
  3614. Chat.Instance().newMessage(packet);
  3615. }
  3616. else {
  3617. Chat.Instance().newChat(packet);
  3618. }
  3619. Chat.mediadoclinks = Chat.chatlistarray.filter(x => x.messageType != 1 && 2).filter(x => x.isDelete == false).filter(x => x.groupMessageType == 0);
  3620. }
  3621. newChat(packet, disableunreadcount = false) {
  3622. var messagecount = Number($('.unread_messages_' + packet.chatGroupId + '').text());
  3623. var obj = Chat.recentChats.find(x => x.chatGroupId == packet.chatGroupId);
  3624. if (obj == undefined) {
  3625. obj = new Unibase.Platform.Connect.Infos.ChatContact();
  3626. obj.isPrivate = packet.isPrivate;
  3627. obj.contactId = packet.fromUserId;
  3628. obj.contactName = packet.fromUserName;
  3629. obj.chatGroupId = packet.chatGroupId;
  3630. if (!obj.isPrivate) {
  3631. obj.contactName = packet.groupName;
  3632. obj.photoUrl = packet.toUserPhotoUrl;
  3633. obj.contactId = 0;
  3634. }
  3635. else {
  3636. obj.photoUrl = Chat.contacts.find(x => x.contactId == packet.fromUserId).photoUrl;
  3637. }
  3638. Chat.recentChats.push(obj);
  3639. }
  3640. else {
  3641. $('.list-groupchat').find('.userChat_' + packet.chatGroupId).remove();
  3642. }
  3643. var message = "", lastChatid = "", unreadcount = 0;
  3644. obj.messageLastUpdatedDate = packet.messageSentDate;
  3645. if (packet.groupMessageType == 0) {
  3646. message = packet.message;
  3647. if (packet.filePath != null) {
  3648. message = packet.fileName;
  3649. }
  3650. message = message;
  3651. lastChatid = packet.chatId;
  3652. if (Chat.chatGroupId != packet.chatGroupId && !disableunreadcount) {
  3653. unreadcount = messagecount + 1;
  3654. }
  3655. }
  3656. obj.lastMessage = message;
  3657. obj.lastChatId = lastChatid;
  3658. obj.unReadMessagesCount = unreadcount;
  3659. Chat.recentChats[Chat.recentChats.findIndex(x => x.chatGroupId == packet.chatGroupId)] = obj;
  3660. var html = Chat.Instance()._chatTemplate.getRecentChatsTemplate(obj);
  3661. $('.list-groupchat').prepend(html);
  3662. $('.defaultClass').addClass('hidden');
  3663. this.updatestatus();
  3664. }
  3665. closeAddParticipants() {
  3666. $(".add_participants_search").val('');
  3667. $('.group-info-header').removeClass('hidden');
  3668. $('.add-participants-header').addClass('hidden');
  3669. $('.div-Chat-AddParticipants').addClass('hidden');
  3670. $('.Search_participants').addClass('hidden');
  3671. $(Chat.visibleProfileEl).removeClass('hidden');
  3672. }
  3673. closeMediaInfo() {
  3674. $('#profileHeader,#profileDetailsWrap').removeClass('hidden');
  3675. $('#mediaHeader,#profileMediaWrap').addClass('hidden');
  3676. $('.media-links-count').text(Chat.mediadoclinks.length);
  3677. }
  3678. closeContactInfo() {
  3679. $('#profileDetailsSection').addClass('hidden');
  3680. $('.participants_search').val('');
  3681. if (!Chat.isFullScreen) {
  3682. if ($('#profileDetailsSection').hasClass('personal-profile')) {
  3683. $('#profileDetailsSection').removeClass('personal-profile');
  3684. $('#chatsContactsSection').removeClass('hidden');
  3685. }
  3686. else {
  3687. $('#chatConvoBody').removeClass('hidden');
  3688. }
  3689. }
  3690. else {
  3691. $('#fullScreenModal').modal('hide');
  3692. }
  3693. }
  3694. filetemplate(fileinfo) {
  3695. var msghtml = '';
  3696. const fileName = fileinfo.name;
  3697. const fileType = fileinfo.type;
  3698. var fileimagepath;
  3699. let imgClass = '';
  3700. let audioplayBtnHtml = '';
  3701. var messagedate = moment.utc(new Date().toString()).format("MM-DD-YYYY");
  3702. if ($('#date_' + messagedate).length == 0) {
  3703. msghtml += Chat.Instance().getMessageDate(messagedate);
  3704. }
  3705. fileimagepath = Unibase.Platform.Connect.Components.Chat.Instance().getfileThumbnail(fileType);
  3706. msghtml += '<li class="chat-messages_temp chat-message-wrap"><div class="messagemedia-body"><div class="sent-messages"><div class="message-div"><div class="single-message"><div class="message-wrapper">' + audioplayBtnHtml + '<span class="message-span flex-grow-1"><img class="thumb_file loadimg img-fluid "' + imgClass + '" src="' + fileimagepath + '" data-dynamic="1"><div class="file_name d-flex align-items-center font-10"><span class="text-truncate">' + fileName + '</span></div></span><span class="uploading-icon"><i class="fa fa-spinner fa-pulse" style="color:black;font-size:12px"></i></span><span class="error-icon btn btn-icon btn-icon-circle btn-rounded btn-outline-red btn-xs btn-icon-wrap hidden"><i class="fa fa-exclamation" style="color:red;font-size:15px"></i></span></div></div></div></div></div></li>';
  3707. $('.messageslist').append(msghtml);
  3708. }
  3709. chatdown() {
  3710. let lastelement = $('.chat-message-wrap').last();
  3711. lastelement[0].scrollIntoView();
  3712. $('.chat_down').addClass('hidden');
  3713. }
  3714. showchatdownicon() {
  3715. var lastelement = $('.chat-message-wrap').last();
  3716. if (lastelement.length == 0) {
  3717. return;
  3718. }
  3719. var a = lastelement[0].classList[0];
  3720. const box = document.querySelector('.' + a);
  3721. const rect = box.getBoundingClientRect();
  3722. var isInViewport = rect.top >= 0 &&
  3723. rect.left >= 0 &&
  3724. rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
  3725. rect.right <= (window.innerWidth || document.documentElement.clientWidth);
  3726. if (rect.top < 0) {
  3727. isInViewport = true;
  3728. }
  3729. if (isInViewport) {
  3730. $('.chat_down').addClass('hidden');
  3731. }
  3732. else {
  3733. $('.chat_down').removeClass('hidden');
  3734. }
  3735. }
  3736. readmore(chatid) {
  3737. $('.read-more_' + chatid).addClass('hidden');
  3738. $('.remain-data_' + chatid).removeClass('hidden');
  3739. $('.doted_' + chatid).addClass('hidden');
  3740. }
  3741. static Instance() {
  3742. if (this.instance === undefined)
  3743. this.instance = new Chat();
  3744. return this.instance;
  3745. }
  3746. }
  3747. Chat.chatlistarray = [];
  3748. Chat.grpdetails = [];
  3749. Chat.contacts = [];
  3750. Chat.groupcontacts = [];
  3751. Chat.recentChats = [];
  3752. Chat.MultiSelect = [];
  3753. Chat.messagesid = [];
  3754. Chat.connectedusers = [];
  3755. Chat.istyping = true;
  3756. Chat.attachments = [];
  3757. Chat.fileitems = 0;
  3758. Chat.itemid = 0;
  3759. Chat.isEdit = false;
  3760. Chat.messagetype = 0;
  3761. Chat.appUrl = '';
  3762. Chat.contactsCount = 0;
  3763. Chat.MediaFiles = [];
  3764. Chat.contactId = 0;
  3765. Chat.chatGroupId = 0;
  3766. Chat.isPrivate = false;
  3767. Chat.isBlock = false;
  3768. Chat.isFullScreen = false;
  3769. Chat.routes = [];
  3770. Chat.AllContacts = [];
  3771. Chat.mediadoclinks = [];
  3772. Components.Chat = Chat;
  3773. })(Components = Connect.Components || (Connect.Components = {}));
  3774. })(Connect = Platform.Connect || (Platform.Connect = {}));
  3775. })(Platform = Unibase.Platform || (Unibase.Platform = {}));
  3776. })(Unibase || (Unibase = {}));