import type { AccessGroupParams, ChangeGroupMemberMuteParams, ChangeGroupMuteParams, CreateGroupParams, GetGroupMemberByTimeParams, GetGroupMemberParams, JoinGroupParams, OpreateGroupParams, SearchGroupMemberParams, SearchGroupParams, SetGroupinfoParams, TransferGroupParams, UpdateMemberInfoParams, getGroupMembersInfoParams, GetGroupMessageHasReadParams } from '@/types/params'; import OpenIMSDK from '.'; import { RequestApi } from '@/constant/api'; import type { GroupApplicationItem, GroupItem, GroupMemberItem, WsResponse, } from '@/types/entity'; export function setupGroup(openIMSDK: OpenIMSDK) { return { createGroup: openIMSDK.createRequestFunction( RequestApi.CreateGroup ), joinGroup: openIMSDK.createRequestFunction( RequestApi.JoinGroup, data => JSON.stringify([ data.groupID, data.reqMsg, data.joinSource, data.ex ?? '', ]) ), inviteUserToGroup: openIMSDK.createRequestFunction( RequestApi.InviteUserToGroup, data => JSON.stringify([ data.groupID, data.reason, JSON.stringify(data.userIDList), ]) ), getJoinedGroupList: openIMSDK.createRequestFunctionWithoutParams< GroupItem[] >(RequestApi.GetJoinedGroupList), searchGroups: openIMSDK.createRequestFunction< SearchGroupParams, GroupItem[] >(RequestApi.SearchGroups), getSpecifiedGroupsInfo: openIMSDK.createRequestFunction< string[], GroupItem[] >(RequestApi.GetSpecifiedGroupsInfo), setGroupInfo: openIMSDK.createRequestFunction( RequestApi.SetGroupInfo ), getGroupApplicationListAsRecipient: openIMSDK.createRequestFunctionWithoutParams( RequestApi.GetGroupApplicationListAsRecipient ), getGroupApplicationListAsApplicant: openIMSDK.createRequestFunctionWithoutParams( RequestApi.GetGroupApplicationListAsApplicant ), acceptGroupApplication: openIMSDK.createRequestFunction( RequestApi.AcceptGroupApplication, data => JSON.stringify([data.groupID, data.fromUserID, data.handleMsg]) ), refuseGroupApplication: openIMSDK.createRequestFunction( RequestApi.RefuseGroupApplication, data => JSON.stringify([data.groupID, data.fromUserID, data.handleMsg]) ), getGroupMemberList: openIMSDK.createRequestFunction< GetGroupMemberParams, GroupMemberItem[] >(RequestApi.GetGroupMemberList, data => JSON.stringify([data.groupID, data.filter, data.offset, data.count]) ), getSpecifiedGroupMembersInfo: openIMSDK.createRequestFunction< getGroupMembersInfoParams, GroupMemberItem[] >(RequestApi.GetSpecifiedGroupMembersInfo, data => JSON.stringify([data.groupID, JSON.stringify(data.userIDList)]) ), searchGroupMembers: openIMSDK.createRequestFunction< SearchGroupMemberParams, GroupMemberItem[] >(RequestApi.SearchGroupMembers), setGroupMemberInfo: openIMSDK.createRequestFunction( RequestApi.SetGroupMemberInfo ), getGroupMemberOwnerAndAdmin: openIMSDK.createRequestFunction< string, GroupMemberItem[] >(RequestApi.GetGroupMemberOwnerAndAdmin), getGroupMemberListByJoinTimeFilter: openIMSDK.createRequestFunction< GetGroupMemberByTimeParams, GroupMemberItem[] >(RequestApi.GetGroupMemberListByJoinTimeFilter, data => JSON.stringify([ data.groupID, data.offset, data.count, data.joinTimeBegin, data.joinTimeEnd, JSON.stringify(data.filterUserIDList), ]) ), kickGroupMember: openIMSDK.createRequestFunction( RequestApi.KickGroupMember, data => JSON.stringify([ data.groupID, data.reason, JSON.stringify(data.userIDList), ]) ), changeGroupMemberMute: openIMSDK.createRequestFunction( RequestApi.ChangeGroupMemberMute, data => JSON.stringify([data.groupID, data.userID, data.mutedSeconds]) ), changeGroupMute: openIMSDK.createRequestFunction( RequestApi.ChangeGroupMute, data => JSON.stringify([data.groupID, data.isMute]) ), transferGroupOwner: openIMSDK.createRequestFunction( RequestApi.TransferGroupOwner, data => JSON.stringify([data.groupID, data.newOwnerUserID]) ), dismissGroup: openIMSDK.createRequestFunction( RequestApi.DismissGroup ), quitGroup: openIMSDK.createRequestFunction(RequestApi.QuitGroup), getGroupMessageHasRead: openIMSDK.createRequestFunction(RequestApi.GetGroupMessageHasRead), }; } export interface GroupApi { createGroup: ( params: CreateGroupParams, operationID?: string ) => Promise>; joinGroup: ( params: JoinGroupParams, operationID?: string ) => Promise>; inviteUserToGroup: ( params: OpreateGroupParams, operationID?: string ) => Promise>; getJoinedGroupList: ( operationID?: string ) => Promise>; searchGroups: ( params: SearchGroupParams, operationID?: string ) => Promise>; getSpecifiedGroupsInfo: ( params: string[], operationID?: string ) => Promise>; setGroupInfo: ( params: SetGroupinfoParams, operationID?: string ) => Promise>; getGroupApplicationListAsRecipient: ( operationID?: string ) => Promise>; getGroupApplicationListAsApplicant: ( operationID?: string ) => Promise>; acceptGroupApplication: ( params: AccessGroupParams, operationID?: string ) => Promise>; refuseGroupApplication: ( params: AccessGroupParams, operationID?: string ) => Promise>; getGroupMemberList: ( operationID?: string ) => Promise>; getSpecifiedGroupMembersInfo: ( params: getGroupMembersInfoParams, operationID?: string ) => Promise>; searchGroupMembers: ( params: SearchGroupMemberParams, operationID?: string ) => Promise>; setGroupMemberInfo: ( params: UpdateMemberInfoParams, operationID?: string ) => Promise>; getGroupMemberOwnerAndAdmin: ( params: string, operationID?: string ) => Promise>; getGroupMemberListByJoinTimeFilter: ( params: GetGroupMemberByTimeParams, operationID?: string ) => Promise>; kickGroupMember: ( params: OpreateGroupParams, operationID?: string ) => Promise>; changeGroupMemberMute: ( params: ChangeGroupMemberMuteParams, operationID?: string ) => Promise>; changeGroupMute: ( params: ChangeGroupMuteParams, operationID?: string ) => Promise>; transferGroupOwner: ( params: TransferGroupParams, operationID?: string ) => Promise>; dismissGroup: ( params: string, operationID?: string ) => Promise>; quitGroup: ( params: string, operationID?: string ) => Promise>; getGroupMessageHasRead: ( params: string, operationID?: string ) => Promise>; }