Skip to content
Snippets Groups Projects
service.js 1.33 KiB
import ConnectionStatus from '/imports/api/connection-status';
import Users from '/imports/api/users';
import Auth from '/imports/ui/services/auth';
import { makeCall } from '/imports/ui/services/api';

const STATS = Meteor.settings.public.stats;
const ROLE_MODERATOR = Meteor.settings.public.user.role_moderator;

const addConnectionStatus = (level) => makeCall('addConnectionStatus', level);

const getConnectionStatus = () => {
  const connectionStatus = ConnectionStatus.find(
    { meetingId: Auth.meetingID },
  ).fetch().map(status => {
    const { userId, level } = status;
    return { userId, level };
  });

  return Users.find(
    {
      meetingId: Auth.meetingID,
      connectionStatus: 'online',
    },
    { fields:
      {
        userId: 1,
        name: 1,
        role: 1,
      },
    },
  ).fetch().reduce((result, user) => {
    const {
      userId,
      role,
      name,
    } = user;

    const status = connectionStatus.find(status => status.userId === userId);

    if (status) {
      result.push({
        name,
        you: Auth.userID === userId,
        moderator: role === ROLE_MODERATOR,
        level: status.level,
        timestamp: status.timestamp,
      });
    }

    return result;
  }, []);
};

const isEnabled = () => STATS.enabled;

export default {
  addConnectionStatus,
  getConnectionStatus,
  isEnabled,
};