import ifPromise from 'onyx-common/ifPromise'
const ZEventsApiEventManager = ({ prototype }) => {
prototype.normalizeEventManager = function (_data) {
const data = this.normalizeData(_data)
const mapProps = {
id: ['id', val => parseInt(val)],
email: 'email',
name: 'name',
avatar_url: 'avatarUrl',
role: 'role'
}
return this.filterAndMapProps(data, mapProps)
}
/**
* @typedef {object} EventManager
* @property {number} id - EventWatch join id
* @property {string} type - type
* @property {string} email -email
* @property {string} avatarUrl -email
* @property {string} role - role
*/
prototype._createEventManager = function ({ id, ...rest }) {
const payload = {
url: this.getUrl(`/api/v1/events/${id}/managers`),
method: 'POST',
requestType: 'json',
data: rest
}
return this.authenticatedFetchWrap(payload)
}
/**
* @function createEventManager
* @param {object} payload - The event watch payload
* @param {number} payload.eventId - event id
* @param {number} payload.userId - userId of the manager to assign
* @param {string} payload.role - enum('ticket_taker', 'basic_cs')
* @returns {EventManager} - event manager object
* @example
*
* createEventManager({
* eventId: 1127,
* userId: 2838,
* role: 'ticket_taker'
* })
*/
prototype.createEventManager = function (payload) {
const finalPayload = {
id: payload.eventId,
account_id: payload.userId,
role: payload.role
}
const raw = ifPromise(payload, () => this._createEventManager(finalPayload))
return raw
.then(res => this.normalizeEventManager(res.data))
.catch(error => this.onError('createEventManager', error))
}
/**
* @function deleteEventManager
* @param {object} payload - The event manager payload
* @param {number} payload.eventId - event id
* @param {number} payload.userId - userId to remove from event manager role
* @returns {void}
* @example
*
* deleteEventManager({
* eventId: 100,
* userId: 3838
* })
*/
prototype.deleteEventManager = function (payload) {
const finalPayload = {
eventId: payload.eventId,
userId: payload.userId
}
console.log('##', finalPayload)
const raw = ifPromise(payload, () => this._deleteEventManager(finalPayload))
return raw
.catch(error => this.onError('deleteEventManager', error))
}
prototype._getEventManagers = function ({ eventId, ...rest }) {
const payload = {
url: this.getUrl(`/api/v1/events/${eventId}/managers`),
method: 'GET',
requestType: 'json',
data: rest
}
return this.authenticatedFetchWrap(payload)
}
/**
* @typedef {object} getEventManagersSummary
* @property {number} page - page of results
* @property {number} perPage - results per page
* @property {boolean} hasMore - are more pages available?
*/
/**
* @typedef {object} getEventManagersReturn
* @property {EventManager[]} entries - list of event managers returned
* @property {getEventManagersSummary} listSummary - list summary object
* @property {object} criteriaSummary - list summary object (empty)
*/
/**
* @function getEventManagers
* @param {object} payload - The payload
* @param {string} payload.eventId - event id
* @param {number} [payload.page=1] - page
* @returns {getEventManagersReturn} - getEventManagersReturn
* @example
*
* getEventManagers({
* eventId: 1
* })
*/
prototype.getEventManagers = function (payload) {
const finalPayload = {
eventId: payload.eventId,
page: payload?.page || 1
}
const raw = ifPromise(payload, () => this._getEventManagers(finalPayload))
return raw
.then(res => this.normalizeListData(res.data, this.normalizeEventManager))
.catch(error => this.onError('getEventManagers', error))
}
prototype._deleteEventManager = function ({ eventId, userId, ...rest }) {
const payload = {
url: this.getUrl(`/api/v1/events/${eventId}/managers/${userId}`),
method: 'DELETE',
requestType: 'json',
data: rest
}
return this.authenticatedFetchWrap(payload)
}
/**
* @function deleteEventManager
* @param {object} payload - The event group payload
* @param {number} payload.eventId - event id
* @param {number} payload.userId - event manager id
* @returns {void}
* @example
*
* deleteEventManager({
* eventId: 1,
* userId: 123
* })
*/
prototype.deleteEventManager = function (payload) {
const finalPayload = {
userId: payload.userId,
eventId: payload.eventId
}
const raw = ifPromise(payload, () => this._deleteEventManager(finalPayload))
return raw
.catch(error => this.onError('deleteEventManager', error))
}
}
export default ZEventsApiEventManager