import ifPromise from 'onyx-common/ifPromise'
import hasKey from 'onyx-common/hasKey'
const ZEventsApiEventAttendees = ({ prototype }) => {
prototype.normalizeEventAttendee = function (_data) {
const data = this.normalizeData(_data)
const mapProps = {
name: 'viewerName',
avatar_url: 'avatarUrl',
is_blocked: ['isBlocked', val => !!val],
is_banned: ['isBanned', val => !!val],
user_id: ['userId', val => parseInt(val)]
}
const mapRt = this.filterAndMapProps(data, mapProps)
const eventObj = this.normalizeEvent(data.event)
const ret = {
...eventObj,
...mapRt
}
ret.isEventRoomMemberEventHost = ret.userId === ret.hostId
if (hasKey(data, 'zoom_authorization')) {
ret.zoomAuthorization = {
zoomSignature: data.zoom_authorization.signature,
zoomMeetingNumber: data.zoom_authorization.meeting_number,
zoomApiKey: data.zoom_authorization.api_key,
zoomUserName: data.zoom_authorization.username,
zoomPassword: data.zoom_authorization.password,
zoomEmail: data.zoom_authorization.email,
zoomRole: data.zoom_authorization.role,
zoomLeaveUrl: this.getSiteUrl('/#view=event&eventId=123')
}
}
if (hasKey(data, 'jitsi_authorization')) {
ret.jitsiAuthorization = {
jwt: data.jitsi_authorization.jwt,
roomName: data.jitsi_authorization.room,
domain: '8x8.vc'
}
}
return ret
}
/**
* @typedef {object} EventAttendee
* @property {number} userId - user id
* @property {string} type - type
* @property {string} url - url to link to
* @property {number} name - name
* @property {string} avatarUrl - url
* @property {boolean} isBanned - is the user banned from chat?
* @property {boolean} isBlocked - is the user blocked from the event entirely?
*/
prototype._banEventAttendee = function ({ eventId, userId }) {
const payload = {
url: this.getUrl(`/api/v1/events/${eventId}/attendees/${userId}/ban`),
method: 'POST'
}
return this.authenticatedFetchWrap(payload)
}
/**
* @function banEventAttendee
* @param {object} payload - The payload
* @param {number} payload.eventId - event id
* @param {number} payload.userId - userId to ban
* @returns {void}
* @example
*
* banEventAttendee({
* eventId: 81818
* userId: 222
* })
*/
prototype.banEventAttendee = function (payload) {
const finalPayload = {
eventId: parseInt(payload.eventId),
userId: parseInt(payload.userId)
}
const raw = ifPromise(payload, () => this._banEventAttendee(finalPayload))
return raw
.catch(error => this.onError('banEventAttendee', error))
}
prototype._blockEventAttendee = function ({ eventId, userId }) {
const payload = {
url: this.getUrl(`/api/v1/events/${eventId}/attendees/${userId}/block`),
method: 'POST'
}
return this.authenticatedFetchWrap(payload)
}
/**
* @function blockEventAttendee
* @param {object} payload - The payload
* @param {number} payload.eventId - event id
* @param {number} payload.userId - user id
* @returns {void}
* @example
*
* blockEventAttendee({
* eventId: 1127,
* userId: 3
* })
*/
prototype.blockEventAttendee = function (payload) {
const finalPayload = {
eventId: parseInt(payload.eventId),
userId: parseInt(payload.userId)
}
const raw = ifPromise(payload, () => this._blockEventAttendee(finalPayload))
return raw
.catch(error => this.onError('blockEventAttendee', error))
}
prototype._muteEventAttendee = function ({ eventId, userId }) {
const payload = {
url: this.getUrl(`/api/v1/events/${eventId}/attendees/${userId}/mute`),
method: 'POST'
}
return this.authenticatedFetchWrap(payload)
}
/**
* @function muteEventAttendee
* @param {object} payload - The payload
* @param {number} payload.eventId - event id
* @param {number} payload.userId - user id
* @returns {void}
* @example
*
* muteEventAttendee({
* eventId: 1127,
* userId: 3
* })
*/
prototype.muteEventAttendee = function (payload) {
const finalPayload = {
eventId: parseInt(payload.eventId),
userId: parseInt(payload.userId)
}
const raw = ifPromise(payload, () => this._muteEventAttendee(finalPayload))
return raw
.catch(error => this.onError('muteEventAttendee', error))
}
prototype._unbanEventAttendee = function ({ eventId, userId }) {
const payload = {
url: this.getUrl(`/api/v1/events/${eventId}/attendees/${userId}/unban`),
method: 'POST'
}
return this.authenticatedFetchWrap(payload)
}
/**
* @function unbanEventAttendee
* @param {object} payload - The payload
* @param {number} payload.eventId - event id
* @param {number} payload.userId - user id
* @returns {void}
* @example
*
* unbanEventAttendee({
* eventId: 1127,
* userId: 1818
* })
*/
prototype.unbanEventAttendee = function (payload) {
const finalPayload = {
eventId: parseInt(payload.eventId),
userId: parseInt(payload.userId)
}
const raw = ifPromise(payload, () => this._unbanEventAttendee(finalPayload))
return raw
.catch(error => this.onError('unbanEventAttendee', error))
}
prototype._unblockEventAttendee = function ({ eventId, userId }) {
const payload = {
url: this.getUrl(`/api/v1/events/${eventId}/attendees/${userId}/unblock`),
method: 'POST'
}
return this.authenticatedFetchWrap(payload)
}
/**
* @function unblockEventAttendee
* @param {object} payload - The payload
* @param {number} payload.eventId - event id
* @param {number} payload.userId - user id
* @returns {void}
* @example
*
* unblockEventAttendee({
* eventId: 1127,
* attendeeId: 1818
* })
*/
prototype.unblockEventAttendee = function (payload) {
const finalPayload = {
eventId: parseInt(payload.eventId),
userId: parseInt(payload.userId)
}
const raw = ifPromise(payload, () => this._unblockEventAttendee(finalPayload))
return raw
.catch(error => this.onError('unblockEventAttendee', error))
}
prototype._unmuteEventAttendee = function ({ eventId, userId }) {
const payload = {
url: this.getUrl(`/api/v1/events/${eventId}/attendees/${userId}/unmute`),
method: 'POST'
}
return this.authenticatedFetchWrap(payload)
}
/**
* @function unmuteEventAttendee
* @param {object} payload - The payload
* @param {number} payload.eventId - event id
* @param {number} payload.userId - user id
* @returns {void}
* @example
*
* unmuteEventAttendee({
* eventId: 1127,
* userId: 2828
* })
*/
prototype.unmuteEventAttendee = function (payload) {
const finalPayload = {
eventId: parseInt(payload.eventId),
userId: parseInt(payload.userId)
}
const raw = ifPromise(payload, () => this._unmuteEventAttendee(finalPayload))
return raw
.catch(error => this.onError('unmuteEventAttendee', error))
}
prototype._getEventAttendees = function ({ eventId, ...rest }) {
const payload = {
url: this.getUrl(`/api/v1/events/${eventId}/attendees`),
method: 'GET',
requestType: 'json',
data: rest
}
return this.authenticatedFetchWrap(payload)
}
/**
* @typedef {object} getEventAttendeesSummary
* @property {number} page - page of results
* @property {number} perPage - results per page
* @property {boolean} hasMore - are more pages available?
*/
/**
* @typedef {object} getEventAttendeesReturn
* @property {EventAttendee[]} eventWatches - list of users returned
* @property {getEventAttendeesSummary} listSummary - list summary object
* @property {object} criteriaSummary - list summary object (empty)
*/
/**
* @function getEventAttendees
* @param {object} payload - The payload
* @param {number} payload.eventId - event ID
* @param {number} [payload.page=1] - page
* @returns {getEventAttendeesReturn} - attendee return
* @example
*
* getEventAttendees({
* eventId: 1127,
* page: 2
* })
*/
prototype.getEventAttendees = function (payload) {
const {
eventId,
page = 1
} = payload
const finalPayload = {
eventId: parseInt(eventId),
page: parseInt(page)
}
const raw = ifPromise(payload, () => this._getEventAttendees(finalPayload))
return raw
.then(res => this.normalizeListData(res.data, this.normalizeEventAttendee))
.catch(error => this.onError('getEventAttendees', error))
}
prototype._postEventAttendee = function ({ eventId, ...rest }) {
const payload = {
url: this.getUrl(`/api/v1/events/${eventId}/attendees`),
method: 'POST',
requestType: 'json',
data: rest
}
return this.authenticatedFetchWrap(payload)
.catch(error => {
if (error.data.message === 'forbidden') {
this.onError('_postEventAttendee', error)
}
})
}
/**
* @typedef {object} postEventAttendeeSummary
* @property {number} page - page of results
* @property {number} perPage - results per page
* @property {boolean} hasMore - are more pages available?
*/
/**
* @typedef {object} postEventAttendeeReturn
* @property {EventAttendee[]} eventWatches - list of users returned
* @property {postEventAttendeeSummary} listSummary - list summary object
* @property {object} criteriaSummary - list summary object (empty)
*/
/**
* @function postEventAttendee
* @param {object} payload - The payload
* @param {number} payload.eventId - event ID
* @param {number} [payload.page=1] - page
* @returns {postEventAttendeeReturn} - attendee return
* @example
*
* postEventAttendee({
* eventId: 1127
* })
*/
prototype.postEventAttendee = function (payload) {
const {
eventId
} = payload
const finalPayload = {
eventId: parseInt(eventId)
}
const raw = ifPromise(payload, () => this._postEventAttendee(finalPayload))
return raw
.then(res => this.normalizeEventAttendee(res.data))
.catch(error => this.onError('postEventAttendee', error))
}
prototype.normalizeAttendeeCount = function (data) {
return parseInt(data.attendee_count)
}
prototype._getEventAttendeeCount = function ({ eventId }) {
const payload = {
url: this.getUrl(`/api/v1/events/${eventId}/attendee_count`),
method: 'GET'
}
return this.authenticatedFetchWrap(payload)
}
/**
* @function getEventAttendeeCount
* @param {object} payload - The payload
* @param {number} payload.eventId - event id
* @returns {number} - the current attendee count for the event
* @example
*
* getEventAttendeeCount({
* eventId: 1127
* })
*/
prototype.getEventAttendeeCount = function (payload) {
const finalPayload = {
eventId: parseInt(payload.eventId)
}
const raw = ifPromise(payload, () => this._getEventAttendeeCount(finalPayload))
return raw
.then(res => this.normalizeAttendeeCount(res.data))
.catch(error => this.onError('getEventAttendeeCount', error))
}
}
export default ZEventsApiEventAttendees