team.js 3.56 KB
import store from '../'

// 收到群列表及更新群列表接口
export function onTeams(teams) {
  if (!Array.isArray(teams)) {
    teams = [teams]
  }
  teams.forEach(team=>{
    if (team.validToCurrentUser === undefined) {
      team.validToCurrentUser = true
    }
    if (team.avatar && team.avatar.indexOf('nim.nosdn.127') >0 && team.avatar.indexOf('?imageView')===-1) {
      team.avatar = team.avatar + '?imageView&thumbnail=300y300'
    }
  })
  store.commit('updateTeamList', teams)
}

// 收到群成员及更新群成员接口
export function onTeamMembers(obj) {
  store.commit('updateTeamMembers', obj)
}

export function onCreateTeam({team, owner}) {
  onTeams(team)
  onTeamMembers({
    teamId: team.teamId,
    members: [owner]
  })
}

export function onSynCreateTeam(team){
  onTeams(team)
}

export function onDismissTeam(obj) {
  store.commit('updateTeamList', {
    invalid: { teamId: obj.teamId }
  })
}

export function onUpdateTeam(team) {
  onTeams(team)
}

export function onTeamNotificationMsg({state, commit}, msg) {
  if (msg.attach.type === 'updateTeam' && msg.attach.team) {
    store.commit('updateTeamInfo', msg.attach.team)
  }
  if (msg.attach.type === 'transferTeam') {
    onTeamMembers({
      teamId: msg.attach.team.teamId,
      members: msg.attach.members
    })
  }
}

export function onAddTeamMembers(obj) {
  obj.accounts.forEach(account=>{
    // 自己被拉入群时更新群列表
    if (account === store.state.userUID) {
      let team = [obj.team]
      onTeams(team)
    }
  })
  onTeamMembers({
    teamId: obj.team.teamId,
    members: obj.members
  })
}

export function onRemoveTeamMembers(obj) {
  obj.accounts.forEach(account => {
    // 自己被移出群时,更新群列表
    if (account === store.state.userUID) {
      obj.team.validToCurrentUser = false
      let team = [obj.team]
      onTeams(team)
    }
  })
  store.commit('removeTeamMembersByAccounts', {
    teamId: obj.team.teamId,
    accounts: obj.accounts
  })
}

export function onUpdateTeamMember(teamMember) {
  onTeamMembers({
    teamId: teamMember.teamId,
    members: teamMember
  })
}

export function onUpdateTeamMembersMute(obj) {
  onTeamMembers({
    teamId: obj.team.teamId,
    members: obj.members
  })
}

export function onUpdateTeamManagers(obj) {
  onTeamMembers({
    teamId: obj.team.teamId,
    members: obj.members
  })
}

// 进入可配置的群信息设置页,进入前改变state中的配置信息,进入页面后读取配置信息更新视图
export function enterSettingPage({commit}, obj) {
  commit('updateTeamSettingConfig', obj)
  setTimeout(() => {
    location.href = `#/teamsetting`
  }, 20)
}


/* 
* 代理nim sdk中对群组的操作方法
* @functionName  nim sdk中的方法名
* @options 传递给sdk方法的参数
*/
export function delegateTeamFunction({state}, {functionName, options}) {
  const nim = state.nim
  if (functionName && nim[functionName] && typeof nim[functionName] === 'function') {
    nim[functionName](options)
  } else {
    throw(`Theare is not property of '${functionName}' in nim or '${functionName}' is not a function`)
  }
}

export function getTeamMembers({ state }, teamId) {
  const nim = state.nim
  if (!nim) {
    // 防止nim未初始化
    setTimeout(() => {
      getTeamMembers(store, teamId)
    }, 200);
    return 
  }
  nim.getTeamMembers({
    teamId: teamId,
    done: (err, obj) => {
      if (obj.members) {
        onTeamMembers({
          teamId: obj.teamId,
          members: obj.members
        })
      } else {
        setTimeout(() => {
          getTeamMembers(store, teamId)
        }, 200);
      }
    }
  })
}