import {v4 as uuidv4} from "uuid"; import IMSDK from "openim-uniapp-polyfill"; import conversation from "./conversation"; const state = { friendList: [], blackList: [], groupList: [], recvFriendApplications: [], sentFriendApplications: [], recvGroupApplications: [], sentGroupApplications: [], unHandleFriendApplicationNum: 0, unHandleGroupApplicationNum: 0, }; const mutations = { SET_FRIEND_LIST(state, list) { state.friendList = [...list]; }, SET_BLACK_LIST(state, list) { state.blackList = [...list]; }, SET_GROUP_LIST(state, list) { state.groupList = [...list]; }, SET_RECV_FRIEND_APPLICATIONS(state, list) { state.recvFriendApplications = [...list]; const count = list.filter((item) => item.handleResult === 0); state.unHandleFriendApplicationNum = count.length; }, SET_SENT_FRIEND_APPLICATIONS(state, list) { state.sentFriendApplications = [...list]; }, SET_RECV_GROUP_APPLICATIONS(state, list) { state.recvGroupApplications = [...list]; const count = list.filter((item) => item.handleResult === 0); state.unHandleGroupApplicationNum = count.length; }, SET_SENT_GROUP_APPLICATIONS(state, list) { state.sentGroupApplications = [...list]; }, }; const actions = { async getFriendList({commit }) { let offset = 0; let friendInfoList = []; let initialFetch = true; while (true) { try { const count = initialFetch ? 10000 : 1000; const {data} = await IMSDK.asyncApi("getFriendListPage", uuidv4(), {offset,count,filterBlack:true}); //console.log(data); friendInfoList = [ ...friendInfoList, ...data, ]; offset += count; if (data.length < count) break; initialFetch = false; } catch (error) { console.error("getFriendListPage error",error); break; } } commit("SET_FRIEND_LIST", friendInfoList); }, async getGrouplist({commit}) { let offset = 0; let groupList = []; while (true) { try { const { data } = await IMSDK.asyncApi( "getJoinedGroupListPage", uuidv4(), { offset, count: 1000, } ); groupList = [...groupList, ...data]; offset += 1000; if (data.length < 1000) break; } catch (error) { console.error("getGrouplist error"); } } //console.log(groupList); commit("SET_GROUP_LIST", groupList); }, getBlacklist({commit}) { //#ifndef APP return []; //#endif IMSDK.asyncApi(IMSDK.IMMethods.GetBlackList, uuidv4()).then(({ data }) => { commit("SET_BLACK_LIST", data); }); }, getRecvFriendApplications({commit}) { //#ifndef APP return []; //#endif IMSDK.asyncApi( IMSDK.IMMethods.GetFriendApplicationListAsRecipient, uuidv4(), ).then(({ data }) => { commit("SET_RECV_FRIEND_APPLICATIONS", data); }); }, getSentFriendApplications({ commit }) { //#ifndef APP return []; //#endif IMSDK.asyncApi( IMSDK.IMMethods.GetFriendApplicationListAsApplicant, uuidv4(), ).then(({ data }) => { commit("SET_SENT_FRIEND_APPLICATIONS", data); }); }, getRecvGroupApplications({ commit,state}) { //#ifndef APP return []; //#endif IMSDK.asyncApi( IMSDK.IMMethods.GetGroupApplicationListAsRecipient, uuidv4(), ).then(({ data }) => { commit("SET_RECV_GROUP_APPLICATIONS", data); }); }, getSentGroupApplications({ commit }) { //#ifndef APP return []; //#endif IMSDK.asyncApi( IMSDK.IMMethods.GetGroupApplicationListAsApplicant, uuidv4(), ).then(({ data }) => { commit("SET_SENT_GROUP_APPLICATIONS", data); }); }, pushNewFriend({ commit, state}, friendInfo) { const tmpList = [...state.friendList]; const idx = tmpList.findIndex((item) => item.userID === friendInfo.userID); if (idx === -1) { commit("SET_FRIEND_LIST", [...tmpList, friendInfo]); } }, updateFriendInfo({commit,state,dispatch }, { friendInfo,isRemove = false}) { const tmpList = [...state.friendList]; const idx = tmpList.findIndex((item) => item.userID === friendInfo.userID); if (idx !== -1) { if (isRemove) { tmpList.splice(idx, 1); } else { tmpList[idx] = { ...friendInfo, }; } commit("SET_FRIEND_LIST", tmpList); } if (isRemove) { const conversationID = friendInfo.userID ? `si_${friendInfo.ownerUserID}_${friendInfo.userID}` : `si_${friendInfo.groupID}`; dispatch('conversation/deleteConversation',conversationID, { root: true }); } }, pushNewBlack({ commit, state}, blackInfo) { const tmpList = [...state.blackList]; const idx = tmpList.findIndex((item) => item.userID === blackInfo.userID); if (idx === -1) { commit("SET_BLACK_LIST", [...tmpList, blackInfo]); } }, updateBlackInfo({commit,state}, {blackInfo,isRemove = false}) { const tmpList = [...state.blackList]; const idx = tmpList.findIndex((item) => item.userID === blackInfo.userID); if (idx !== -1) { if (isRemove) { tmpList.splice(idx, 1); } else { tmpList[idx] = { ...blackInfo, }; } commit("SET_BLACK_LIST", tmpList); } }, pushNewGroup({commit,state}, groupInfo) { const tmpList = [...state.groupList]; const idx = tmpList.findIndex((item) => item.groupID === groupInfo.groupID); if (idx === -1) { commit("SET_GROUP_LIST", [...tmpList, groupInfo]); } }, updateGroupInfo({commit,state,rootState}, {groupInfo,isRemove = false}, ) { const tmpList = [...state.groupList]; const idx = tmpList.findIndex((item) => item.groupID === groupInfo.groupID); if (rootState.conversation.currentGroup.groupID === groupInfo.groupID) { commit("conversation/SET_CURRENT_GROUP", groupInfo, { root: true }); } if (idx !== -1) { if (isRemove) { tmpList.splice(idx, 1); } else { tmpList[idx] = { ...groupInfo, }; } commit("SET_GROUP_LIST", tmpList); } }, pushNewRecvFriendApplition({commit,state}, application) { const tmpList = [...state.recvFriendApplications]; const idx = tmpList.findIndex( (item) => item.fromUserID === application.fromUserID, ); if (idx !== -1) { tmpList.splice(idx, 1); } commit("SET_RECV_FRIEND_APPLICATIONS", [...tmpList, application]); }, updateRecvFriendApplition({commit,state,rootState}, {application,isRemove = false}, ) { console.log(application); const tmpList = [...state.recvFriendApplications]; const idx = tmpList.findIndex( (item) => item.fromUserID === application.fromUserID, ); if (idx !== -1) { if (isRemove) { tmpList.splice(idx, 1); } else { tmpList[idx] = { ...application, }; } commit("SET_RECV_FRIEND_APPLICATIONS", tmpList); } }, pushNewSentFriendApplition({commit,state}, application) { const tmpList = [...state.sentFriendApplications]; const idx = tmpList.findIndex( (item) => item.toUserID === application.toUserID, ); if (idx !== -1) { tmpList.splice(idx, 1); } commit("SET_SENT_FRIEND_APPLICATIONS", [...tmpList, application]); }, updateSentFriendApplition({commit,state,rootState}, {application,isRemove = false}, ) { const tmpList = [...state.sentFriendApplications]; const idx = tmpList.findIndex( (item) => item.toUserID === application.toUserID, ); if (idx !== -1) { if (isRemove) { tmpList.splice(idx, 1); } else { tmpList[idx] = { ...application, }; } commit("SET_SENT_FRIEND_APPLICATIONS", tmpList); } }, pushNewRecvGroupApplition({commit,state}, application) { const tmpList = [...state.recvGroupApplications]; const idx = tmpList.findIndex((item) => item.userID === application.userID); if (idx !== -1) { tmpList.splice(idx, 1); } commit("SET_RECV_GROUP_APPLICATIONS", [...tmpList, application]); // const newList = state.recvGroupApplications.filter((item)=>{ // item.userID !== application.userID // }); // commit("SET_RECV_GROUP_APPLICATIONS", [...newList, application]); }, updateRecvGroupApplition({commit,state,rootState}, {application,isRemove = false}, ) { const tmpList = [...state.recvGroupApplications]; const idx = tmpList.findIndex((item) => item.userID === application.userID); if (idx !== -1) { if (isRemove) { tmpList.splice(idx, 1); } else { tmpList[idx] = { ...application, }; } commit("SET_RECV_GROUP_APPLICATIONS", tmpList); } }, pushNewSentGroupApplition({commit,state}, application) { const tmpList = [...state.sentGroupApplications]; const idx = tmpList.findIndex( (item) => item.groupID === application.groupID, ); if (idx !== -1) { tmpList.splice(idx, 1); } commit("SET_SENT_GROUP_APPLICATIONS", [...tmpList, application]); }, updateSentGroupApplition({commit,state,rootState}, {application,isRemove = false}, ) { const tmpList = [...state.sentGroupApplications]; const idx = tmpList.findIndex( (item) => item.groupID === application.groupID, ); if (idx !== -1) { if (isRemove) { tmpList.splice(idx, 1); } else { tmpList[idx] = { ...application, }; } commit("SET_SENT_GROUP_APPLICATIONS", tmpList); } }, }; export default { namespaced: true, state, mutations, actions, };