Files
VRCX/src/api/group.js
2025-10-15 12:24:14 +11:00

766 lines
19 KiB
JavaScript

import { useGroupStore, useUserStore } from '../stores';
import { request } from '../service/request';
function getCurrentUserId() {
return useUserStore().currentUser.id;
}
const groupReq = {
/**
* @param {string} groupId
* @param {{isRepresenting: bool}} params
* @returns
*/
setGroupRepresentation(groupId, params) {
return request(`groups/${groupId}/representation`, {
method: 'PUT',
params
}).then((json) => {
const args = {
json,
groupId,
params
};
return args;
});
},
/**
* @param {{ groupId: string }} params
* @return { Promise<{json: any, params}> }
*/
cancelGroupRequest(params) {
return request(`groups/${params.groupId}/requests`, {
method: 'DELETE'
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{ groupId: string, postId: string }} params
* @return { Promise<{json: any, params}> }
*/
deleteGroupPost(params) {
return request(`groups/${params.groupId}/posts/${params.postId}`, {
method: 'DELETE'
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @type {import('../types/api/group').GetGroup}
*/
getGroup(params) {
return request(`groups/${params.groupId}`, {
method: 'GET',
params: {
includeRoles: params.includeRoles || false
}
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
*
* @param {{ groupId: string }} params
* @return { Promise<{json: any, ref: any, cache?: boolean, params}> }
*/
getCachedGroup(params) {
const groupStore = useGroupStore();
return new Promise((resolve, reject) => {
const ref = groupStore.cachedGroups.get(params.groupId);
if (typeof ref === 'undefined') {
groupReq
.getGroup(params)
.then((args) => {
args.ref = groupStore.applyGroup(args.json);
resolve(args);
})
.catch(reject);
} else {
resolve({
cache: true,
json: ref,
params,
ref
});
}
});
},
/**
* @param {{ userId: string }} params
* @return { Promise<{json: any, params}> }
*/
getRepresentedGroup(params) {
return request(`users/${params.userId}/groups/represented`, {
method: 'GET'
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{ userId: string }} params
* @return { Promise<{json: any, params}> }
*/
getGroups(params) {
return request(`users/${params.userId}/groups`, {
method: 'GET'
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{ groupId: string }} params
* @return { Promise<{json: any, params}> }
*/
joinGroup(params) {
return request(`groups/${params.groupId}/join`, {
method: 'POST'
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{ groupId: string }} params
* @return { Promise<{json: any, params}> }
*/
leaveGroup(params) {
return request(`groups/${params.groupId}/leave`, {
method: 'POST'
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{ query: string }} params
* @return { Promise<{json: any, params}> }
*/
groupStrictsearch(params) {
return request(`groups/strictsearch`, {
method: 'GET',
params
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
userId: string,
groupId: string,
params: {
visibility: string,
isSubscribedToAnnouncements: bool,
managerNotes: string
}
*/
setGroupMemberProps(userId, groupId, params) {
return request(`groups/${groupId}/members/${userId}`, {
method: 'PUT',
params
}).then((json) => {
const args = {
json,
userId,
groupId,
params
};
return args;
});
},
/**
* @param {{
* userId: string,
* groupId: string,
* roleId: string
* }} params
* @return { Promise<{json: any, params}> }
*/
addGroupMemberRole(params) {
return request(
`groups/${params.groupId}/members/${params.userId}/roles/${params.roleId}`,
{
method: 'PUT'
}
).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{
* userId: string,
* groupId: string,
* roleId: string
* }} params
* @return { Promise<{json: any, params}> }
*/
removeGroupMemberRole(params) {
return request(
`groups/${params.groupId}/members/${params.userId}/roles/${params.roleId}`,
{
method: 'DELETE'
}
).then((json) => {
const args = {
json,
params
};
return args;
});
},
getGroupPermissions(params) {
return request(`users/${params.userId}/groups/permissions`, {
method: 'GET'
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{
groupId: string,
n: number,
offset: number
}} params
* @return { Promise<{json: any, params}> }
*/
getGroupPosts(params) {
return request(`groups/${params.groupId}/posts`, {
method: 'GET',
params
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
editGroupPost(params) {
return request(`groups/${params.groupId}/posts/${params.postId}`, {
method: 'PUT',
params
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
createGroupPost(params) {
return request(`groups/${params.groupId}/posts`, {
method: 'POST',
params
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{
* groupId: string,
* userId: string
* }} params
* @return { Promise<{json: any, params, ref?: any}> }
*/
getGroupMember(params) {
return request(`groups/${params.groupId}/members/${params.userId}`, {
method: 'GET'
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{
* groupId: string,
* n: number,
* offset: number
* }} params
* @return { Promise<{json: any, params}> }
*/
getGroupMembers(params) {
return request(`groups/${params.groupId}/members`, {
method: 'GET',
params
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{
* groupId: string,
* query: string,
* n: number,
* offset: number
* }} params
* @return { Promise<{json: any, params}> }
*/
getGroupMembersSearch(params) {
return request(`groups/${params.groupId}/members/search`, {
method: 'GET',
params
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{
* groupId: string
* }} params
* @return { Promise<{json: any, params}> }
*/
blockGroup(params) {
return request(`groups/${params.groupId}/block`, {
method: 'POST'
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{
* groupId: string,
* userId: string
* }} params
* @return { Promise<{json: any, params}> }
*/
unblockGroup(params) {
return request(`groups/${params.groupId}/members/${params.userId}`, {
method: 'DELETE'
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{
* groupId: string,
* userId: string
* }} params
* @return { Promise<{json: any, params}> }
*/
sendGroupInvite(params) {
return request(`groups/${params.groupId}/invites`, {
method: 'POST',
params: {
userId: params.userId
}
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{
* groupId: string,
* userId: string
* }} params
* @return { Promise<{json: any, params}> }
*/
kickGroupMember(params) {
return request(`groups/${params.groupId}/members/${params.userId}`, {
method: 'DELETE'
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{ groupId: string, userId: string }} params
* @return { Promise<{json: any, params}> }
*/
banGroupMember(params) {
return request(`groups/${params.groupId}/bans`, {
method: 'POST',
params: {
userId: params.userId
}
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
unbanGroupMember(params) {
return request(`groups/${params.groupId}/bans/${params.userId}`, {
method: 'DELETE'
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{ groupId: string, userId: string }} params
* @return { Promise<{json: any, params}> }
*/
deleteSentGroupInvite(params) {
return request(`groups/${params.groupId}/invites/${params.userId}`, {
method: 'DELETE'
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
deleteBlockedGroupRequest(params) {
return request(`groups/${params.groupId}/members/${params.userId}`, {
method: 'DELETE'
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
acceptGroupInviteRequest(params) {
return request(`groups/${params.groupId}/requests/${params.userId}`, {
method: 'PUT',
params: {
action: 'accept'
}
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
rejectGroupInviteRequest(params) {
return request(`groups/${params.groupId}/requests/${params.userId}`, {
method: 'PUT',
params: {
action: 'reject'
}
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
blockGroupInviteRequest(params) {
return request(`groups/${params.groupId}/requests/${params.userId}`, {
method: 'PUT',
params: {
action: 'reject',
block: true
}
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
getGroupBans(params) {
return request(`groups/${params.groupId}/bans`, {
method: 'GET',
params
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{ groupId: string }} params
* @return { Promise<{json: any, params}> }
*/
getGroupAuditLogTypes(params) {
return request(`groups/${params.groupId}/auditLogTypes`, {
method: 'GET'
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{ groupId: string, n: number, offset: number, eventTypes?: array }} params
* @return { Promise<{json: any, params}> }
*/
getGroupLogs(params) {
return request(`groups/${params.groupId}/auditLogs`, {
method: 'GET',
params
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{ groupId: string }} params
* @return { Promise<{json: any, params}> }
*/
getGroupInvites(params) {
return request(`groups/${params.groupId}/invites`, {
method: 'GET',
params
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{ groupId: string }} params
* @return { Promise<{json: any, params}> }
*/
getGroupJoinRequests(params) {
return request(`groups/${params.groupId}/requests`, {
method: 'GET',
params
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{ groupId: string }} params
* @return { Promise<{json: any, params}> }
*/
getGroupInstances(params) {
return request(
`users/${getCurrentUserId()}/instances/groups/${params.groupId}`,
{
method: 'GET'
}
).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{ groupId: string }} params
* @return { Promise<{json: any, params}> }
*/
getGroupRoles(params) {
return request(`groups/${params.groupId}/roles`, {
method: 'GET',
params
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
getUsersGroupInstances() {
return request(`users/${getCurrentUserId()}/instances/groups`, {
method: 'GET'
}).then((json) => {
const args = {
json
};
return args;
});
},
/**
* @param {{
query: string,
n: number,
offset: number,
order: string,
sortBy: string
}} params
* @return { Promise<{json: any, params}> }
*/
groupSearch(params) {
return request(`groups`, {
method: 'GET',
params
}).then((json) => {
const args = {
json,
params
};
return args;
});
},
/**
* @param {{
groupId: string,
galleryId: string,
n: number,
offset: number
}} params
* @return { Promise<{json: any, params}> }
*/
getGroupGallery(params) {
return request(
`groups/${params.groupId}/galleries/${params.galleryId}`,
{
method: 'GET',
params: {
n: params.n,
offset: params.offset
}
}
).then((json) => {
const args = {
json,
params
};
return args;
});
},
getGroupCalendar(groupId) {
return request(`calendar/${groupId}`, {
method: 'GET'
});
},
/**
* @type {import('../types/api/group').GetCalendars}
*/
getGroupCalendars(date) {
return request(`calendar?date=${date}`, {
method: 'GET'
});
},
/**
* @type {import('../types/api/group').GetFollowingCalendars}
*/
getFollowingGroupCalendars(date) {
return request(`calendar/following?date=${date}`, {
method: 'GET'
});
},
getFeaturedGroupCalendars(date) {
return request(`calendar/featured?date=${date}`, {
method: 'GET'
});
}
// getRequestedGroups() {
// return request(
// `users/${API.currentUser.id}/groups/requested`,
// {
// method: 'GET'
// }
// ).then((json) => {
// const args = {
// json
// };
// API.$emit('GROUP:REQUESTED', args);
// return args;
// });
// }
// /**
// * @param {{ groupId: string }} params
// * @return { Promise<{json: any, params}> }
// */
// API.getGroupAnnouncement = function (params) {
// return request(`groups/${params.groupId}/announcement`, {
// method: 'GET'
// }).then((json) => {
// var args = {
// json,
// params
// };
// this.$emit('GROUP:ANNOUNCEMENT', args);
// return args;
// });
// };
};
export default groupReq;