UNPKG

@qonsoll/chat-core

Version:
2 lines (1 loc) 16.2 kB
"use strict";var e=require("react"),t=require("./Provider.js"),n=require("./createChat.js"),a=require("firebase"),s=require("./Proxy.js"),o=require("./constants.js"),r=require("lodash"),i=require("@qonsoll/qvideo"),u=require("../../constants/dist/index.cjs.js");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=c(a),d=c(r),f=function(){return s.Proxy.user||{}},T=function(e){var t=e.collection,n=e.id,a=e.ref;return s.__awaiter(void 0,void 0,void 0,(function(){return s.__generator(this,(function(e){switch(e.label){case 0:return[4,(a||l.default.firestore()).collection(t).doc(n).delete()];case 1:return e.sent(),[2]}}))}))},p={on_delete:{field:"isMassageDeleting",type:o.MESSAGE_ACTION_CONTEXT_ACTIONS.MESSAGE_DELETED}},_=function(a){var s=a||{},o=s.messageText,r=s.setMessageText,i=t.useCurrentChat(),u=i.oppositeUserData,c=i.collectionName,l=i.groupMembersIds,d=i.chatId,T=i.isChatExist,p=t.useChatsContext().oppositeUserData,_=f();return e.useCallback((function(e){var t=e.attachedFiles,a=e.messageType,s=e.qVideoId;if(o.trim()||(null==t?void 0:t.length)||s){!s&&r("");var i={oppositeUserData:u||p,user:_,qVideoId:s,messageType:a,messageText:o,attachedFiles:t,chatId:d,groupMembersIds:l,collectionName:c};if(T)try{n.sendMessage(i)}catch(e){console.error("error in message send",e)}else n.createChat(i).then((function(){console.log("chat created successfully")})).catch((function(e){console.error("error in chat create",e)}))}}),[p,d,c,l,T,o,u,r,_])},h=o.CHAT_COLLECTIONS.MESSAGES,v=o.CHAT_COLLECTIONS.MESSAGES_VIEWS,g=function(a){var r=(a||{}).message,u=t.useCurrentChat(),c=u.collectionName,d=u.lastMessageId,f=u.chatId,p=t.useMessagesContext().messages,_=t.useSelectedMessageContext().selectedMessage,g=t.useMessageActionDispatch(),C=((null==_?void 0:_._id)||(null==r?void 0:r._id))===d;return e.useCallback((function(){return s.__awaiter(void 0,void 0,void 0,(function(){var e,t,a,u,d,_,S,E,A,I,m,M,y;return s.__generator(this,(function(s){g({type:o.MESSAGE_ACTION_CONTEXT_ACTIONS.MESSAGE_DELETED,payload:r}),e=r._id,t=r.status,a=r.attachedFiles;try{(null==a?void 0:a.length)&&a.forEach((function(e){var t=e.url;return!e.qVideoId&&l.default.storage().refFromURL(t).delete()})),(null==r?void 0:r.messageType)===o.MESSAGE_TYPES.LIVE_VIDEO&&i.removeVideo(null==r?void 0:r.qVideoId,process.env.REACT_APP_QVIDEO_API_KEY)}catch(e){console.error("ERROR on delete attach in message from chat.\nmessage id:".concat(null==r?void 0:r._id,", message index: ").concat(null==p?void 0:p.findIndex((function(e){var t=e._id;return(null==r?void 0:r._id)===t}))))}return u=t!==o.MESSAGE_STATUS.SEEN,d=null==p?void 0:p[p.length-2],S=(_=d||{})._id,E=_.text,A=_._createdAt,I=_._createdBy,m=_.messageType,(C||u)&&(M=C?{lastMessageId:S||null,lastMessageText:E||null,lastMessageDateAndTime:A||null,lastMessageSenderId:I||null,lastMessageType:m||null}:{},(null===(y=Object.keys(M))||void 0===y?void 0:y.length)&&n.updateFirestoreDocument({collection:c,id:f,data:M})),f&&e&&(T({collection:"".concat(c,"/").concat(f,"/").concat(v),id:e}),T({collection:"".concat(c,"/").concat(f,"/").concat(h),id:e})),[2]}))}))}),[f,c,C,r,g,p])},C=o.CHAT_COLLECTIONS.MESSAGES,S=function(a){var o=a||{},r=o.messageText,i=o.message,u=t.useCurrentChat(),c=u.collectionName,l=u.lastMessageId,d=u.chatId,T=f(),p=t.useSelectedMessage(),_=p[0],h=_.selectedMessage,v=_.onPressEditMessage,g=p[1],S=((null==h?void 0:h._id)||(null==i?void 0:i._id))===l;return e.useCallback((function(){S&&(null==h?void 0:h.text)!==r&&n.updateFirestoreDocument({collection:c,id:d,data:{lastMessageText:r||""}}),d&&(null==h?void 0:h._id)&&(null==h?void 0:h.text)!==r&&n.updateFirestoreDocument({collection:"".concat(c,"/").concat(d,"/").concat(C),id:null==h?void 0:h._id,data:{_isUpdated:!0,text:r||"",_updatedBy:null==T?void 0:T._id}}),g((function(e){return s.__assign(s.__assign({},e),{selectedMessage:{},isEditingMessage:!1})})),null==v||v("")}),[d,c,S,r,v,null==h?void 0:h._id,null==h?void 0:h.text,g,null==T?void 0:T._id])},E=o.CHAT_COLLECTIONS.MESSAGES,A=o.CHAT_COLLECTIONS.CHATS,I=o.CHAT_COLLECTIONS.MEMBERS,m=o.CHAT_COLLECTIONS.MESSAGES_VIEWS,M=o.CHAT_COLLECTIONS.PERMISSIONS,y=o.CHAT_COLLECTIONS.CHAT_USERS,O=function(n){var a=f()._id,r=t.useChats(),i=r[0],u=i.chats,c=i.oppositeUserData,T=r[1],p=t.useMessagesDispatch(),_=e.useState([]),h=_[0],v=_[1],g=e.useState([]),C=g[0],S=g[1],E=e.useState(!1),O=E[0],N=E[1],x=e.useCallback((function(e){var t=e.chatId,n=e.oppositeUserId,a=e.displayName,r=e.chatPhotoUrl;return l.default.firestore().collection(A).doc(t).onSnapshot((function(e){if(!e.exists)return T({type:o.CHATS_CONTEXT_ACTIONS.DELETE_CHAT,payload:{chatId:t}}),p({type:o.MESSAGES_CONTEXT_ACTIONS.CLEAR_MESSAGES}),void v((function(e){return d.default.uniqBy(s.__spreadArray(s.__spreadArray([],e,!0),[{chatId:t,withListeners:!0}],!1),"chatId")}));var i=e.data(),u=i.lastMessageDateAndTime,c=void 0===u?null:u,l=i.lastMessageSenderId,f=void 0===l?null:l,_=i.lastMessageText,h=void 0===_?null:_,g=i.lastMessageId,C=void 0===g?null:g,S=i.lastMessageType,E=void 0===S?null:S;T({type:o.CHATS_CONTEXT_ACTIONS.UPDATE_CHAT_DATA,payload:{chatId:t,chatData:{chatId:t,typeOfChat:o.CHAT_TYPES.CHAT,collectionName:A,isChatExist:!0,oppositeUserId:n,displayName:a,chatPhotoUrl:r,lastMessageDateAndTime:c,lastMessageSenderId:f,lastMessageText:h,lastMessageId:C,lastMessageType:E}}}),v((function(e){return d.default.uniqBy(s.__spreadArray(s.__spreadArray([],e,!0),[{chatId:t,oppositeUserId:n,withListeners:!1}],!1),"chatId")}))}))}),[]);return e.useEffect((function(){h.filter((function(e){return!e.withListeners})).forEach((function(e){var t=e.chatId,n=e.oppositeUserId,r=u.findIndex((function(e){var n=e.chatId;return t===n}));if(-1!==r){var i=l.default.firestore().collection("".concat(A,"/").concat(t,"/").concat(I)).doc(a).onSnapshot((function(e){if(e.exists){var n=(null==e?void 0:e.data()).lastMessageStatus,a=void 0===n?null:n;T({type:o.CHATS_CONTEXT_ACTIONS.UPDATE_CHAT_DATA,payload:{chatData:{lastMessageStatus:a},chatId:t}})}})),c=l.default.firestore().collection("".concat(A,"/").concat(t,"/").concat(m)).where("views.".concat(a),"==",!1).onSnapshot((function(e){var n=e.docs.map((function(e){return e.data()}));T({type:o.CHATS_CONTEXT_ACTIONS.UPDATE_CHAT_DATA,payload:{chatData:{unreadMessagesAmount:null==n?void 0:n.length},chatId:t}})})),d=l.default.firestore().collection(y).doc(n).onSnapshot((function(e){if(e.exists){var n=e.data();T({type:o.CHATS_CONTEXT_ACTIONS.UPDATE_CHAT_DATA,payload:{chatData:{oppositeUserData:n},chatId:t}})}})),f=l.default.firestore().collection("".concat(A,"/").concat(t,"/").concat(I)).doc(n).onSnapshot((function(e){if(e.exists){var n=e.data(),a=n.isOnline,s=void 0===a?null:a,r=n.isTyping,i=void 0===r?null:r,u=n.lastActiveTime,c=void 0===u?null:u;T({type:o.CHATS_CONTEXT_ACTIONS.UPDATE_CHAT_DATA,payload:{chatData:{isOppositeUserOnline:s,isOppositeUserTyping:i,lastActiveTime:c},chatId:t}})}})),p=l.default.firestore().collection("".concat(A,"/").concat(t,"/").concat(M)).doc(n).onSnapshot((function(e){if(e.exists){var n=e.data().allowWrite;T({type:o.CHATS_CONTEXT_ACTIONS.UPDATE_CHAT_DATA,payload:{chatData:{oppositeUserPermissions:{allowWrite:n}},chatId:t}})}})),_=l.default.firestore().collection("".concat(A,"/").concat(t,"/").concat(M)).doc(a).onSnapshot((function(e){if(e.exists){var n=e.data().allowWrite;T({type:o.CHATS_CONTEXT_ACTIONS.UPDATE_CHAT_DATA,payload:{chatData:{myPermissions:{allowWrite:n}},chatId:t}})}}));S((function(e){return s.__spreadArray(s.__spreadArray([],e,!0),[i,c,p,d,f,_],!1)}));var g=h.map((function(e){return e.chatId===t?s.__assign(s.__assign({},e),{withListeners:!0}):e}));v(g)}}));var e=h.filter((function(e){return e.withListeners})).length===n;e&&N(!0)}),[u,h,n,a]),e.useEffect((function(){return function(){(null==C?void 0:C.length)&&n===h.length&&O&&(C.forEach((function(e){return null==e?void 0:e()})),S([]))}}),[h.length,n,C,O]),e.useEffect((function(){var e=null==u?void 0:u.filter((function(e){return e.oppositeUserId===(null==c?void 0:c._id)}));N(!1),v((function(t){return d.default.intersectionWith(t,e,(function(e,t){return e.chatId===t.chatId})).map((function(e){return s.__assign(s.__assign({},e),{withListeners:!1})}))}))}),[c]),e.useMemo((function(){var e=[x,O];return e.fetchMainChatInfo=x,e.isAllListenersWorking=O,e}),[x,O])},N=function(){return N=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var s in t=arguments[n])Object.prototype.hasOwnProperty.call(t,s)&&(e[s]=t[s]);return e},N.apply(this,arguments)},x=function(e){return{loading:null==e,value:e}},D=function(t){var n=t?t():void 0,a=e.useReducer((function(e,t){switch(t.type){case"error":return N({},e,{error:t.error,loading:!1,value:void 0});case"reset":return x(t.defaultValue);case"value":return N({},e,{error:void 0,loading:!1,value:t.value});default:return e}}),x(n)),s=a[0],o=a[1],r=function(){var e=t?t():void 0;o({type:"reset",defaultValue:e})},i=function(e){o({type:"error",error:e})},u=function(e){o({type:"value",value:e})};return e.useMemo((function(){return{error:s.error,loading:s.loading,reset:r,setError:i,setValue:u,value:s.value}}),[s.error,s.loading,r,i,u,s.value])},L=function(e,t){var n=!e&&!t,a=!!e&&!!t&&e.isEqual(t);return n||a},U=function(t,n){return function(t,n,a){var s=e.useRef(t);return e.useEffect((function(){n(t,s.current)||(s.current=t,a&&a())})),s}(t,L,n)},H=function(t,n,a){var s=a?a.idField:void 0,o=a?a.refField:void 0,r=a?a.snapshotOptions:void 0,i=a?a.transform:void 0,u=function(t,n,a){var s=D(),o=s.error,r=s.loading,i=s.reset,u=s.setError,c=s.setValue,l=s.value,d=U(n,i);e.useEffect((function(){if(d.current){if(t){var e=a&&a.snapshotListenOptions?d.current.onSnapshot(a.snapshotListenOptions,c,u):d.current.onSnapshot(c,u);return function(){e()}}d.current.get(a?a.getOptions:void 0).then(c).catch(u)}else c(void 0)}),[d.current]);var f=[l,r,o];return e.useMemo((function(){return f}),f)}(t,n,a),c=u[0],l=u[1],d=u[2],f=e.useMemo((function(){return c?c.docs.map((function(e){return function(e,t,n,a,s){if(e.exists){var o=e.data(t);return s&&(o=s(o)),n&&(o[n]=e.id),a&&(o[a]=e.ref),o}}(e,r,s,o,i)})):void 0}),[c,r,s,o,i]),T=[f,l,d];return e.useMemo((function(){return T}),T)},P=o.CHAT_COLLECTIONS.CHAT_USERS,w=o.CHAT_COLLECTIONS.FOLDERS,R=o.CHAT_COLLECTIONS.CHATS;exports.useChangeMessageStatus=function(){var a=f()._id,s=t.useMessagesContext().messages,o=t.useCurrentChat(),r=e.useRef(null);return e.useCallback((function(e){var t={start:e.visibleStartIndex,end:e.visibleStopIndex};JSON.stringify(t)!==JSON.stringify(r.current)&&(null==s||s.slice(t.start,t.end+1).forEach((function(e){n.changeMessageStatus({userId:a,message:e,chatData:o})})),r.current=t)}),[o,s,a])},exports.useChangeUserStatus=function(t){var a=t.isChatOpen;e.useEffect((function(){n.changeOnlineStatus({isOnline:a})}),[a])},exports.useChatFetch=function(){var n,a=f()._id,r=t.useChats(),i=r[0],c=r[1],d=i.oppositeUserDataLoading,T=i.oppositeUserData,p=e.useState(!0),_=p[0],h=p[1],v=function(e,t){return H(!0,e,t)}(e.useMemo((function(){var e=l.default.firestore().collection("".concat(P,"/").concat(a,"/").concat(w,"/").concat(u.DEFAULT_FOLDER_ID,"/").concat(R));return(null==T?void 0:T._id)&&!d?e.where("oppositeUserId","==",null==T?void 0:T._id):d?null:e.orderBy("_createdAt","desc")}),[d,T,a])),g=v[0],C=v[1],S=O(null===(n=null==g?void 0:g.filter((function(e){return e.type===o.CHAT_TYPES.CHAT})))||void 0===n?void 0:n.length),E=S[0],A=S[1];return e.useEffect((function(){var e=[];return(null==g?void 0:g.length)&&!C?(s.__awaiter(void 0,void 0,void 0,(function(){return s.__generator(this,(function(t){return null==g||g.map((function(t){var n=t._id,a=t.type,r=t.displayName,i=t.chatPhotoUrl,u=t.oppositeUserId;return s.__awaiter(void 0,void 0,void 0,(function(){var t;return s.__generator(this,(function(s){return a===o.CHAT_TYPES.CHAT&&(t=E({chatId:n,oppositeUserId:u,displayName:r,chatPhotoUrl:i}),e.push(t)),[2]}))}))})),[2]}))})),1===(null==g?void 0:g.length)&&c({type:o.CHATS_CONTEXT_ACTIONS.SET_CURRENT_CHAT_ID,payload:{chatId:g[0]._id}})):(null==g?void 0:g.length)||C||h(!1),function(){e.forEach((function(e){return null==e?void 0:e()}))}}),[g,C]),e.useEffect((function(){A&&h(!1)}),[A]),e.useEffect((function(){return T&&c({type:o.CHATS_CONTEXT_ACTIONS.CLEAR_CHATS,payload:{oppositeUserId:null==T?void 0:T._id}})}),[T]),e.useMemo((function(){var e=[i,_];return e.chats=i,e.loading=_,e}),[i,_])},exports.useChatMessages=function(){var n=t.useCurrentChat(),a=n.chatId,r=n.collectionName,i=t.useMessages(),u=i[0],c=u.messages,d=u.isInitLoading,f=u.isEndOfList,T=u.onUploadMessages,p=i[1],_=e.useRef(null),h=e.useCallback((function(e){var t=e.docChanges()[0];"removed"===(null==t?void 0:t.type)&&1===e.docChanges().length&&(_.current=t.doc.data()._id);var n=e.docs.map((function(e){var t=e.data();return!t._createdAt&&e.metadata.hasPendingWrites?s.__assign(s.__assign({},t),{_createdAt:l.default.firestore.Timestamp.now()}):t}));p({type:o.MESSAGES_CONTEXT_ACTIONS.SET_MESSAGES,payload:{newFetchedMessages:n,deletedMessageId:_.current}})}),[c,p]);return e.useEffect((function(){var e=l.default.firestore().collection("".concat(r,"/").concat(a,"/").concat(E)).orderBy("_createdAt","desc").limit((null==c?void 0:c.length)||35).onSnapshot({includeMetadataChanges:!0},{next:h,error:function(e){console.warn("ERROR in useChatMessages listener(probably chat haven't created yet)\n----------\n".concat(e,"\n----------")),!a&&p({type:o.MESSAGES_CONTEXT_ACTIONS.SET_INIT_LOADING,payload:!1})}});return function(){null==e||e()}}),[null==c?void 0:c.length,a]),e.useEffect((function(){return function(){return p({type:o.MESSAGES_CONTEXT_ACTIONS.CLEAR_MESSAGES})}}),[a]),{onUploadMessages:T,messages:c,isInitLoading:d,isEndOfList:f}},exports.useChatsListener=O,exports.useMessageActionListener=function(n,a){var s,o,r=null===(s=t.useMessageActionContext())||void 0===s?void 0:s[null===(o=null==p?void 0:p[n])||void 0===o?void 0:o.field],i=t.useMessageActionDispatch();return e.useEffect((function(){r&&(null==a||a(r))}),[r]),e.useCallback((function(){var e;return i({type:null===(e=null==p?void 0:p[n])||void 0===e?void 0:e.type,payload:!1})}),[n,i])},exports.useMessageActions=function(e){var t=e||{},n=t.messageText,a=t.setMessageText,s=t.message;return{onMessageReply:function(){},onMessageCopy:function(){},onMessageEdit:S({message:s,messageText:n}),onMessagePin:function(){},onMessageForward:function(){},onMessageDelete:g({message:s}),onMessageSend:_({messageText:n,setMessageText:a})}},exports.useScheduleMessageSend=function(a){var r=a.messageText,i=a.attachedFiles,u=t.useCurrentChat(),c=u.chatId,l=u.oppositeUserId,d=u.collectionName,T=u.oppositeUserData,p=u.isChatExist,_=f();return e.useCallback((function(e,t){var a={chatId:c,collectionName:d||o.CHAT_COLLECTIONS.CHATS,messageType:o.MESSAGE_TYPES.TEXT,messageText:t?"":r,userId:null==_?void 0:_._id,oppositeUserId:l||(null==T?void 0:T._id),scheduleDate:e};(null==i?void 0:i.length)&&(a.attachedFiles=i),t&&(a.qVideoId=t,a.messageType=o.MESSAGE_TYPES.LIVE_VIDEO);var u=function(e){try{n.sendMessageWithAttachments({oppositeUserData:T,user:_,data:e,create:n.saveScheduledMessage})}catch(e){console.error("error in sendMessageWithAttachments",e)}};if(p)u(a);else try{n.createChat({oppositeUserData:T,user:_,messageText:a.messageText,messageType:a.messageType,attachedFiles:a.attachedFiles,collectionName:d,qVideoId:a.qVideoId},(function(e){var t=e.chatId;return u(s.__assign(s.__assign({},a),{chatId:t}))}))}catch(e){console.error("error in chat create",e)}}),[i,r])},exports.useUpdateUserTypingStatus=function(a){var s=a.messageText,o=t.useCurrentChat(),r=o.collectionName,i=o.chatId,u=o.isChatExist,c=f(),l=e.useState(!1),d=l[0],T=l[1],p=e.useCallback((function(e){u&&(n.updateTypingStatus({isTyping:e,user:c,collectionName:r,chatId:i}),T(e))}),[c,i,u]);return e.useEffect((function(){var e;return u&&(s?1===s.length&&(p(!0),T(!0),e=setTimeout((function(){p(!1),T(!1)}),3e4)):(p(!1),T(!1)),s.length>0&&document.getElementById("messageInput")===document.activeElement&&!d&&(T(!0),p(!0),e=setTimeout((function(){p(!1),T(!1)}),3e4))),function(){clearTimeout(e)}}),[s]),e.useEffect((function(){var e;return d&&(e=setTimeout((function(){p(!1),T(!1)}),3e4)),function(){return e&&clearTimeout(e)}}),[d]),p},exports.useUser=f;