mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-04-23 16:53:50 +02:00
refactor queryRequest
This commit is contained in:
@@ -407,9 +407,9 @@
|
||||
removeFromArray
|
||||
} from '../../../shared/utils';
|
||||
import { useGalleryStore, useGroupStore, useModalStore, useUserStore } from '../../../stores';
|
||||
import { groupRequest, queryRequest } from '../../../api';
|
||||
import { Badge } from '../../ui/badge';
|
||||
import { formatJsonVars } from '../../../shared/utils/base/ui';
|
||||
import { groupRequest } from '../../../api';
|
||||
|
||||
import DialogJsonTab from '../DialogJsonTab.vue';
|
||||
import GroupDialogInfoTab from './GroupDialogInfoTab.vue';
|
||||
@@ -796,7 +796,7 @@
|
||||
selectedImageUrl: post.imageUrl
|
||||
};
|
||||
}
|
||||
groupRequest.getCachedGroup({ groupId }).then((args) => {
|
||||
queryRequest.fetch('group', { groupId }).then((args) => {
|
||||
D.groupRef = args.ref;
|
||||
});
|
||||
D.visible = true;
|
||||
|
||||
@@ -84,10 +84,8 @@ vi.mock('../../../../service/request', () => ({
|
||||
failedGetRequests: new Map()
|
||||
}));
|
||||
vi.mock('../../../../api', () => ({
|
||||
groupRequest: {
|
||||
getCachedGroupGallery: vi
|
||||
.fn()
|
||||
.mockResolvedValue({ json: [], params: {} })
|
||||
queryRequest: {
|
||||
fetch: vi.fn().mockResolvedValue({ json: [], params: {} })
|
||||
},
|
||||
userRequest: {}
|
||||
}));
|
||||
|
||||
@@ -2,13 +2,13 @@ import { describe, expect, test, vi, beforeEach } from 'vitest';
|
||||
import { ref } from 'vue';
|
||||
|
||||
vi.mock('../../../../api', () => ({
|
||||
groupRequest: {
|
||||
getCachedGroupGallery: vi.fn()
|
||||
queryRequest: {
|
||||
fetch: vi.fn()
|
||||
}
|
||||
}));
|
||||
|
||||
import { useGroupGalleries } from '../useGroupGalleries';
|
||||
import { groupRequest } from '../../../../api';
|
||||
import { queryRequest } from '../../../../api';
|
||||
|
||||
function createGroupDialog(overrides = {}) {
|
||||
return ref({
|
||||
@@ -120,7 +120,7 @@ describe('useGroupGalleries', () => {
|
||||
galleries: [{ id: 'g1', name: 'Gallery' }]
|
||||
}
|
||||
});
|
||||
groupRequest.getCachedGroupGallery.mockResolvedValue({
|
||||
queryRequest.fetch.mockResolvedValue({
|
||||
json: [],
|
||||
params: { groupId: 'grp_1' }
|
||||
});
|
||||
@@ -145,7 +145,7 @@ describe('useGroupGalleries', () => {
|
||||
]
|
||||
}
|
||||
});
|
||||
groupRequest.getCachedGroupGallery.mockResolvedValue({
|
||||
queryRequest.fetch.mockResolvedValue({
|
||||
json: [],
|
||||
params: { groupId: 'grp_1' }
|
||||
});
|
||||
@@ -153,7 +153,7 @@ describe('useGroupGalleries', () => {
|
||||
const { getGroupGalleries } = useGroupGalleries(groupDialog);
|
||||
await getGroupGalleries();
|
||||
|
||||
expect(groupRequest.getCachedGroupGallery).toHaveBeenCalledTimes(2);
|
||||
expect(queryRequest.fetch).toHaveBeenCalledTimes(2);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -162,7 +162,7 @@ describe('useGroupGalleries', () => {
|
||||
const groupDialog = createGroupDialog();
|
||||
const { getGroupGallery } = useGroupGalleries(groupDialog);
|
||||
|
||||
groupRequest.getCachedGroupGallery.mockResolvedValueOnce({
|
||||
queryRequest.fetch.mockResolvedValueOnce({
|
||||
json: [
|
||||
{
|
||||
groupId: 'grp_1',
|
||||
@@ -190,7 +190,7 @@ describe('useGroupGalleries', () => {
|
||||
const groupDialog = createGroupDialog();
|
||||
const { getGroupGallery } = useGroupGalleries(groupDialog);
|
||||
|
||||
groupRequest.getCachedGroupGallery.mockResolvedValueOnce({
|
||||
queryRequest.fetch.mockResolvedValueOnce({
|
||||
json: [
|
||||
{
|
||||
groupId: 'grp_other',
|
||||
@@ -211,7 +211,7 @@ describe('useGroupGalleries', () => {
|
||||
const groupDialog = createGroupDialog();
|
||||
const { getGroupGallery } = useGroupGalleries(groupDialog);
|
||||
|
||||
groupRequest.getCachedGroupGallery.mockResolvedValueOnce({
|
||||
queryRequest.fetch.mockResolvedValueOnce({
|
||||
json: Array.from({ length: 50 }, (_, i) => ({
|
||||
groupId: 'grp_1',
|
||||
galleryId: 'g1',
|
||||
@@ -223,7 +223,7 @@ describe('useGroupGalleries', () => {
|
||||
|
||||
await getGroupGallery('grp_1', 'g1');
|
||||
|
||||
expect(groupRequest.getCachedGroupGallery).toHaveBeenCalledTimes(1);
|
||||
expect(queryRequest.fetch).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
test('handles API errors gracefully', async () => {
|
||||
@@ -233,7 +233,7 @@ describe('useGroupGalleries', () => {
|
||||
.spyOn(console, 'error')
|
||||
.mockImplementation(() => {});
|
||||
|
||||
groupRequest.getCachedGroupGallery.mockRejectedValueOnce(
|
||||
queryRequest.fetch.mockRejectedValueOnce(
|
||||
new Error('API Error')
|
||||
);
|
||||
|
||||
|
||||
@@ -3,9 +3,10 @@ import { ref } from 'vue';
|
||||
|
||||
vi.mock('../../../../api', () => ({
|
||||
groupRequest: {
|
||||
getGroupMembersSearch: vi.fn(),
|
||||
getCachedGroupMember: vi.fn(),
|
||||
getCachedGroupMembers: vi.fn()
|
||||
getGroupMembersSearch: vi.fn()
|
||||
},
|
||||
queryRequest: {
|
||||
fetch: vi.fn()
|
||||
},
|
||||
userRequest: {}
|
||||
}));
|
||||
@@ -94,7 +95,7 @@ vi.mock('worker-timers', () => ({
|
||||
}));
|
||||
|
||||
import { useGroupMembers } from '../useGroupMembers';
|
||||
import { groupRequest } from '../../../../api';
|
||||
import { groupRequest, queryRequest } from '../../../../api';
|
||||
import { groupDialogFilterOptions } from '../../../../shared/constants';
|
||||
|
||||
/**
|
||||
@@ -133,7 +134,7 @@ function createDeps(overrides = {}) {
|
||||
describe('useGroupMembers', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
groupRequest.getCachedGroupMembers.mockReset();
|
||||
queryRequest.fetch.mockReset();
|
||||
});
|
||||
|
||||
describe('groupDialogMemberSortValue', () => {
|
||||
@@ -316,7 +317,7 @@ describe('useGroupMembers', () => {
|
||||
|
||||
await loadMoreGroupMembers();
|
||||
|
||||
expect(groupRequest.getCachedGroupMembers).not.toHaveBeenCalled();
|
||||
expect(queryRequest.fetch).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test('does not load when already loading', async () => {
|
||||
@@ -327,12 +328,12 @@ describe('useGroupMembers', () => {
|
||||
|
||||
await loadMoreGroupMembers();
|
||||
|
||||
expect(groupRequest.getCachedGroupMembers).not.toHaveBeenCalled();
|
||||
expect(queryRequest.fetch).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test('marks done when fewer than n results returned', async () => {
|
||||
const groupDialog = createGroupDialog();
|
||||
groupRequest.getCachedGroupMembers.mockResolvedValue({
|
||||
queryRequest.fetch.mockResolvedValue({
|
||||
json: [{ userId: 'usr_1' }],
|
||||
params: { groupId: 'grp_1', n: 100, offset: 0 }
|
||||
});
|
||||
@@ -359,7 +360,7 @@ describe('useGroupMembers', () => {
|
||||
const groupDialog = createGroupDialog({
|
||||
members: [{ userId: 'existing' }]
|
||||
});
|
||||
groupRequest.getCachedGroupMembers.mockResolvedValue({
|
||||
queryRequest.fetch.mockResolvedValue({
|
||||
json: [{ userId: 'usr_new' }],
|
||||
params: { groupId: 'grp_1', n: 100, offset: 0 }
|
||||
});
|
||||
@@ -384,7 +385,7 @@ describe('useGroupMembers', () => {
|
||||
const groupDialog = createGroupDialog({
|
||||
members: [{ userId: 'usr_me' }]
|
||||
});
|
||||
groupRequest.getCachedGroupMembers.mockResolvedValue({
|
||||
queryRequest.fetch.mockResolvedValue({
|
||||
json: [{ userId: 'usr_me' }, { userId: 'usr_2' }],
|
||||
params: { groupId: 'grp_1', n: 100, offset: 0 }
|
||||
});
|
||||
@@ -408,7 +409,7 @@ describe('useGroupMembers', () => {
|
||||
|
||||
test('marks done on error', async () => {
|
||||
const groupDialog = createGroupDialog();
|
||||
groupRequest.getCachedGroupMembers.mockRejectedValue(
|
||||
queryRequest.fetch.mockRejectedValue(
|
||||
new Error('fail')
|
||||
);
|
||||
|
||||
@@ -442,7 +443,7 @@ describe('useGroupMembers', () => {
|
||||
|
||||
await setGroupMemberSortOrder({ value: 'joinedAt:desc' });
|
||||
|
||||
expect(groupRequest.getCachedGroupMembers).not.toHaveBeenCalled();
|
||||
expect(queryRequest.fetch).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -460,7 +461,7 @@ describe('useGroupMembers', () => {
|
||||
|
||||
await setGroupMemberFilter(filter);
|
||||
|
||||
expect(groupRequest.getCachedGroupMembers).not.toHaveBeenCalled();
|
||||
expect(queryRequest.fetch).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -83,10 +83,14 @@ vi.mock('../../../../service/request', () => ({
|
||||
}));
|
||||
vi.mock('../../../../api', () => ({
|
||||
groupRequest: {},
|
||||
userRequest: {}
|
||||
userRequest: {},
|
||||
queryRequest: {
|
||||
fetch: vi.fn()
|
||||
}
|
||||
}));
|
||||
|
||||
import { useGroupModerationData } from '../useGroupModerationData';
|
||||
import { queryRequest } from '../../../../api';
|
||||
|
||||
function createTables() {
|
||||
return {
|
||||
@@ -124,9 +128,6 @@ function createDeps(overrides = {}) {
|
||||
getGroupMembers: vi.fn(),
|
||||
getGroupMembersSearch: vi.fn()
|
||||
},
|
||||
userRequest: {
|
||||
getCachedUser: vi.fn()
|
||||
},
|
||||
...overrides
|
||||
};
|
||||
}
|
||||
@@ -134,6 +135,7 @@ function createDeps(overrides = {}) {
|
||||
describe('useGroupModerationData', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
queryRequest.fetch.mockReset();
|
||||
});
|
||||
|
||||
describe('getAllGroupBans', () => {
|
||||
@@ -343,7 +345,7 @@ describe('useGroupModerationData', () => {
|
||||
await addGroupMemberToSelection('usr_1');
|
||||
|
||||
expect(deps.selection.setSelectedUsers).toHaveBeenCalledWith('usr_1', member);
|
||||
expect(deps.userRequest.getCachedUser).not.toHaveBeenCalled();
|
||||
expect(queryRequest.fetch).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test('falls back to user API when member has no user object', async () => {
|
||||
@@ -353,14 +355,14 @@ describe('useGroupModerationData', () => {
|
||||
params: {}
|
||||
});
|
||||
deps.applyGroupMember.mockReturnValue({ userId: 'usr_1' });
|
||||
deps.userRequest.getCachedUser.mockResolvedValue({
|
||||
queryRequest.fetch.mockResolvedValue({
|
||||
json: { id: 'usr_1', displayName: 'Alice' }
|
||||
});
|
||||
|
||||
const { addGroupMemberToSelection } = useGroupModerationData(deps);
|
||||
await addGroupMemberToSelection('usr_1');
|
||||
|
||||
expect(deps.userRequest.getCachedUser).toHaveBeenCalledWith({ userId: 'usr_1' });
|
||||
expect(queryRequest.fetch).toHaveBeenCalledWith('user', { userId: 'usr_1' });
|
||||
expect(deps.selection.setSelectedUsers).toHaveBeenCalledWith('usr_1', expect.objectContaining({
|
||||
userId: 'usr_1',
|
||||
displayName: 'Alice'
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { computed, ref } from 'vue';
|
||||
import { groupRequest } from '../../../api';
|
||||
|
||||
import { queryRequest } from '../../../api';
|
||||
|
||||
/**
|
||||
* Composable for managing group gallery loading and display state.
|
||||
*
|
||||
* @param {import('vue').Ref} groupDialog - reactive ref to the group dialog state
|
||||
* @returns {{
|
||||
* isGroupGalleryLoading: import('vue').Ref<boolean>,
|
||||
@@ -26,7 +26,7 @@ export function useGroupGalleries(groupDialog) {
|
||||
);
|
||||
|
||||
/**
|
||||
* @param {Object} gallery
|
||||
* @param {object} gallery
|
||||
*/
|
||||
function groupGalleryStatus(gallery) {
|
||||
const style = {};
|
||||
@@ -42,6 +42,7 @@ export function useGroupGalleries(groupDialog) {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param obj
|
||||
*/
|
||||
function updateGroupDialogData(obj) {
|
||||
groupDialog.value = {
|
||||
@@ -79,7 +80,7 @@ export function useGroupGalleries(groupDialog) {
|
||||
};
|
||||
const count = 50; // 5000 max
|
||||
for (let i = 0; i < count; i++) {
|
||||
const args = await groupRequest.getCachedGroupGallery(params);
|
||||
const args = await queryRequest.fetch('groupGallery', params);
|
||||
if (args) {
|
||||
for (const json of args.json) {
|
||||
if (groupDialog.value.id === json.groupId) {
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
import { computed, ref } from 'vue';
|
||||
import { debounce } from '../../../shared/utils';
|
||||
|
||||
import {
|
||||
groupDialogFilterOptions,
|
||||
groupDialogSortingOptions
|
||||
} from '../../../shared/constants';
|
||||
import { groupRequest } from '../../../api';
|
||||
import { groupRequest, queryRequest } from '../../../api';
|
||||
import { debounce } from '../../../shared/utils';
|
||||
|
||||
import * as workerTimers from 'worker-timers';
|
||||
|
||||
/**
|
||||
* Composable for managing group member loading, searching, sorting, and filtering.
|
||||
*
|
||||
* @param {import('vue').Ref} groupDialog - reactive ref to the group dialog state
|
||||
* @param {Object} deps - external dependencies
|
||||
* @param {object} deps - external dependencies
|
||||
* @param {import('vue').Ref} deps.currentUser - reactive ref to the current user
|
||||
* @param {Function} deps.applyGroupMember - function to apply group member data
|
||||
* @param {Function} deps.handleGroupMember - function to handle group member updates
|
||||
* @param {Function} deps.t - i18n translation function
|
||||
* @returns {Object} members composable API
|
||||
* @returns {object} members composable API
|
||||
*/
|
||||
export function useGroupMembers(
|
||||
groupDialog,
|
||||
@@ -185,8 +186,8 @@ export function useGroupMembers(
|
||||
loadMoreGroupMembersParams.value.roleId = D.memberFilter.id;
|
||||
}
|
||||
if (D.inGroup) {
|
||||
await groupRequest
|
||||
.getCachedGroupMember({
|
||||
await queryRequest
|
||||
.fetch('groupMember', {
|
||||
groupId: D.id,
|
||||
userId: currentUser.value.id
|
||||
})
|
||||
@@ -219,8 +220,8 @@ export function useGroupMembers(
|
||||
}
|
||||
D.memberSearch = '';
|
||||
isGroupMembersLoading.value = true;
|
||||
await groupRequest
|
||||
.getCachedGroupMembers(params)
|
||||
await queryRequest
|
||||
.fetch('groupMembers', params)
|
||||
.finally(() => {
|
||||
isGroupMembersLoading.value = false;
|
||||
})
|
||||
@@ -278,7 +279,7 @@ export function useGroupMembers(
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Object} sortOrder
|
||||
* @param {object} sortOrder
|
||||
*/
|
||||
async function setGroupMemberSortOrder(sortOrder) {
|
||||
const D = groupDialog.value;
|
||||
@@ -290,7 +291,7 @@ export function useGroupMembers(
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Object} filter
|
||||
* @param {object} filter
|
||||
*/
|
||||
async function setGroupMemberFilter(filter) {
|
||||
const D = groupDialog.value;
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
import { ref } from 'vue';
|
||||
import { toast } from 'vue-sonner';
|
||||
|
||||
import { debounce } from '../../../shared/utils';
|
||||
import { queryRequest } from '../../../api';
|
||||
|
||||
import * as workerTimers from 'worker-timers';
|
||||
|
||||
/**
|
||||
* Composable for group moderation data fetching, member management,
|
||||
* searching, sorting and filtering.
|
||||
*
|
||||
* @param {object} deps
|
||||
* @param {import('vue').Ref} deps.groupMemberModeration - store ref
|
||||
* @param {import('vue').Ref} deps.currentUser - store ref
|
||||
@@ -23,7 +25,6 @@ import * as workerTimers from 'worker-timers';
|
||||
* @param {object} deps.selection.selectedUsers
|
||||
* @param {Function} deps.selection.setSelectedUsers
|
||||
* @param {object} deps.groupRequest - API module
|
||||
* @param {object} deps.userRequest - API module
|
||||
*/
|
||||
export function useGroupModerationData(deps) {
|
||||
const {
|
||||
@@ -33,8 +34,7 @@ export function useGroupModerationData(deps) {
|
||||
handleGroupMember,
|
||||
tables,
|
||||
selection,
|
||||
groupRequest,
|
||||
userRequest
|
||||
groupRequest
|
||||
} = deps;
|
||||
|
||||
const isGroupMembersLoading = ref(false);
|
||||
@@ -60,6 +60,9 @@ export function useGroupModerationData(deps) {
|
||||
|
||||
// ── Members ──────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
async function getGroupMembers() {
|
||||
members.value = [];
|
||||
isGroupMembersDone.value = false;
|
||||
@@ -94,6 +97,9 @@ export function useGroupModerationData(deps) {
|
||||
await loadMoreGroupMembers();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
async function loadMoreGroupMembers() {
|
||||
if (isGroupMembersDone.value || isGroupMembersLoading.value) {
|
||||
return;
|
||||
@@ -119,7 +125,10 @@ export function useGroupModerationData(deps) {
|
||||
for (let i = 0; i < args.json.length; i++) {
|
||||
const member = args.json[i];
|
||||
if (member.userId === currentUser.value.id) {
|
||||
if (members.value.length > 0 && members.value[0].userId === currentUser.value.id) {
|
||||
if (
|
||||
members.value.length > 0 &&
|
||||
members.value[0].userId === currentUser.value.id
|
||||
) {
|
||||
members.value.splice(0, 1);
|
||||
}
|
||||
break;
|
||||
@@ -142,12 +151,18 @@ export function useGroupModerationData(deps) {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
async function loadAllGroupMembers() {
|
||||
if (isGroupMembersLoading.value) {
|
||||
return;
|
||||
}
|
||||
await getGroupMembers();
|
||||
while (groupMemberModeration.value.visible && !isGroupMembersDone.value) {
|
||||
while (
|
||||
groupMemberModeration.value.visible &&
|
||||
!isGroupMembersDone.value
|
||||
) {
|
||||
isGroupMembersLoading.value = true;
|
||||
await new Promise((resolve) => {
|
||||
workerTimers.setTimeout(resolve, 1000);
|
||||
@@ -157,6 +172,10 @@ export function useGroupModerationData(deps) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param sortOrder
|
||||
*/
|
||||
async function setGroupMemberSortOrder(sortOrder) {
|
||||
if (memberSortOrder.value === sortOrder) {
|
||||
return;
|
||||
@@ -165,6 +184,10 @@ export function useGroupModerationData(deps) {
|
||||
await getGroupMembers();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param filter
|
||||
*/
|
||||
async function setGroupMemberFilter(filter) {
|
||||
if (memberFilter.value === filter) {
|
||||
return;
|
||||
@@ -173,6 +196,9 @@ export function useGroupModerationData(deps) {
|
||||
await getGroupMembers();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
function groupMembersSearch() {
|
||||
if (memberSearch.value.length < 3) {
|
||||
tables.members.data = [];
|
||||
@@ -183,6 +209,9 @@ export function useGroupModerationData(deps) {
|
||||
debounce(groupMembersSearchDebounced, 200)();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
function groupMembersSearchDebounced() {
|
||||
const groupId = groupMemberModeration.value.id;
|
||||
const search = memberSearch.value;
|
||||
@@ -208,7 +237,9 @@ export function useGroupModerationData(deps) {
|
||||
if (groupId === args.params.groupId) {
|
||||
tables.members.data = args.json.results.map((member) => ({
|
||||
...member,
|
||||
$selected: Boolean(selection.selectedUsers[member.userId])
|
||||
$selected: Boolean(
|
||||
selection.selectedUsers[member.userId]
|
||||
)
|
||||
}));
|
||||
}
|
||||
})
|
||||
@@ -219,6 +250,10 @@ export function useGroupModerationData(deps) {
|
||||
|
||||
// ── Bans ─────────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
*
|
||||
* @param groupId
|
||||
*/
|
||||
async function getAllGroupBans(groupId) {
|
||||
tables.bans.data = [];
|
||||
const params = { groupId, n: 100, offset: 0 };
|
||||
@@ -229,7 +264,9 @@ export function useGroupModerationData(deps) {
|
||||
for (let i = 0; i < count; i++) {
|
||||
const args = await groupRequest.getGroupBans(params);
|
||||
if (args && args.json) {
|
||||
if (groupMemberModeration.value.id !== args.params.groupId) {
|
||||
if (
|
||||
groupMemberModeration.value.id !== args.params.groupId
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
args.json.forEach((json) => {
|
||||
@@ -257,6 +294,10 @@ export function useGroupModerationData(deps) {
|
||||
|
||||
// ── Invites / Join Requests / Blocked ────────────────────────
|
||||
|
||||
/**
|
||||
*
|
||||
* @param groupId
|
||||
*/
|
||||
async function getAllGroupInvites(groupId) {
|
||||
tables.invites.data = [];
|
||||
const params = { groupId, n: 100, offset: 0 };
|
||||
@@ -267,7 +308,9 @@ export function useGroupModerationData(deps) {
|
||||
for (let i = 0; i < count; i++) {
|
||||
const args = await groupRequest.getGroupInvites(params);
|
||||
if (args) {
|
||||
if (groupMemberModeration.value.id !== args.params.groupId) {
|
||||
if (
|
||||
groupMemberModeration.value.id !== args.params.groupId
|
||||
) {
|
||||
return;
|
||||
}
|
||||
for (const json of args.json) {
|
||||
@@ -291,6 +334,10 @@ export function useGroupModerationData(deps) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param groupId
|
||||
*/
|
||||
async function getAllGroupJoinRequests(groupId) {
|
||||
tables.joinRequests.data = [];
|
||||
const params = { groupId, n: 100, offset: 0, blocked: false };
|
||||
@@ -323,6 +370,10 @@ export function useGroupModerationData(deps) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param groupId
|
||||
*/
|
||||
async function getAllGroupBlockedRequests(groupId) {
|
||||
tables.blocked.data = [];
|
||||
const params = { groupId, n: 100, offset: 0, blocked: true };
|
||||
@@ -355,6 +406,10 @@ export function useGroupModerationData(deps) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param groupId
|
||||
*/
|
||||
async function getAllGroupInvitesAndJoinRequests(groupId) {
|
||||
try {
|
||||
await Promise.all([
|
||||
@@ -369,6 +424,11 @@ export function useGroupModerationData(deps) {
|
||||
|
||||
// ── Logs ─────────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
*
|
||||
* @param groupId
|
||||
* @param eventTypes
|
||||
*/
|
||||
async function getAllGroupLogs(groupId, eventTypes = []) {
|
||||
tables.logs.data = [];
|
||||
const params = { groupId, n: 100, offset: 0 };
|
||||
@@ -382,11 +442,15 @@ export function useGroupModerationData(deps) {
|
||||
for (let i = 0; i < count; i++) {
|
||||
const args = await groupRequest.getGroupLogs(params);
|
||||
if (args) {
|
||||
if (groupMemberModeration.value.id !== args.params.groupId) {
|
||||
if (
|
||||
groupMemberModeration.value.id !== args.params.groupId
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
for (const json of args.json.results) {
|
||||
const existsInData = newData.some((dataItem) => dataItem.id === json.id);
|
||||
const existsInData = newData.some(
|
||||
(dataItem) => dataItem.id === json.id
|
||||
);
|
||||
if (!existsInData) {
|
||||
newData.push(json);
|
||||
}
|
||||
@@ -410,10 +474,17 @@ export function useGroupModerationData(deps) {
|
||||
|
||||
// ── User Selection ───────────────────────────────────────────
|
||||
|
||||
/**
|
||||
*
|
||||
* @param userId
|
||||
*/
|
||||
async function addGroupMemberToSelection(userId) {
|
||||
const D = groupMemberModeration.value;
|
||||
let member = {};
|
||||
const memberArgs = await groupRequest.getGroupMember({ groupId: D.id, userId });
|
||||
const memberArgs = await groupRequest.getGroupMember({
|
||||
groupId: D.id,
|
||||
userId
|
||||
});
|
||||
if (memberArgs && memberArgs.json) {
|
||||
member = applyGroupMember(memberArgs.json);
|
||||
}
|
||||
@@ -421,16 +492,21 @@ export function useGroupModerationData(deps) {
|
||||
selection.setSelectedUsers(member.userId, member);
|
||||
return;
|
||||
}
|
||||
const userArgs = await userRequest.getCachedUser({ userId });
|
||||
const userArgs = await queryRequest.fetch('user', { userId });
|
||||
member.userId = userArgs.json.id;
|
||||
member.user = userArgs.json;
|
||||
member.displayName = userArgs.json.displayName;
|
||||
selection.setSelectedUsers(member.userId, member);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param userIdInput
|
||||
*/
|
||||
async function selectGroupMemberUserId(userIdInput) {
|
||||
if (!userIdInput) return;
|
||||
const regexUserId = /usr_[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}/g;
|
||||
const regexUserId =
|
||||
/usr_[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}/g;
|
||||
let match;
|
||||
const userIdList = new Set();
|
||||
while ((match = regexUserId.exec(userIdInput)) !== null) {
|
||||
@@ -448,6 +524,9 @@ export function useGroupModerationData(deps) {
|
||||
|
||||
// ── Reset ────────────────────────────────────────────────────
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
function resetData() {
|
||||
tables.members.data = [];
|
||||
tables.bans.data = [];
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
|
||||
import { hasGroupPermission, userImage, userStatusClass } from '../../shared/utils';
|
||||
import { useFriendStore, useGroupStore, useModalStore } from '../../stores';
|
||||
import { groupRequest, userRequest } from '../../api';
|
||||
import { groupRequest, queryRequest } from '../../api';
|
||||
import { VirtualCombobox } from '../ui/virtual-combobox';
|
||||
|
||||
import configRepository from '../../service/config';
|
||||
@@ -224,8 +224,8 @@
|
||||
inviteGroupDialog.value.groupName = '';
|
||||
return;
|
||||
}
|
||||
groupRequest
|
||||
.getCachedGroup({ groupId })
|
||||
queryRequest
|
||||
.fetch('group', { groupId })
|
||||
.then((args) => {
|
||||
inviteGroupDialog.value.groupName = args.ref.name;
|
||||
})
|
||||
@@ -242,8 +242,8 @@
|
||||
function initDialog() {
|
||||
const D = inviteGroupDialog.value;
|
||||
if (D.groupId) {
|
||||
groupRequest
|
||||
.getCachedGroup({
|
||||
queryRequest
|
||||
.fetch('group', {
|
||||
groupId: D.groupId
|
||||
})
|
||||
.then((args) => {
|
||||
@@ -256,7 +256,7 @@
|
||||
}
|
||||
|
||||
if (D.userId) {
|
||||
userRequest.getCachedUser({ userId: D.userId }).then((args) => {
|
||||
queryRequest.fetch('user', { userId: D.userId }).then((args) => {
|
||||
D.userObject = args.ref;
|
||||
D.userIds = [D.userId];
|
||||
});
|
||||
|
||||
@@ -162,7 +162,7 @@
|
||||
useModalStore
|
||||
} from '../../stores';
|
||||
import { checkCanInvite, getLaunchURL, isRealInstance, parseLocation } from '../../shared/utils';
|
||||
import { instanceRequest, worldRequest } from '../../api';
|
||||
import { instanceRequest, queryRequest } from '../../api';
|
||||
|
||||
import InviteDialog from './InviteDialog/InviteDialog.vue';
|
||||
import configRepository from '../../service/config';
|
||||
@@ -230,16 +230,23 @@
|
||||
|
||||
getConfig();
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
function closeInviteDialog() {
|
||||
inviteDialog.value.visible = false;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param tag
|
||||
*/
|
||||
function showInviteDialog(tag) {
|
||||
if (!isRealInstance(tag)) {
|
||||
return;
|
||||
}
|
||||
const L = parseLocation(tag);
|
||||
worldRequest
|
||||
.getCachedWorld({
|
||||
queryRequest
|
||||
.fetch('world', {
|
||||
worldId: L.worldId
|
||||
})
|
||||
.then((args) => {
|
||||
@@ -259,6 +266,12 @@
|
||||
D.visible = true;
|
||||
});
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param location
|
||||
* @param shortName
|
||||
* @param desktop
|
||||
*/
|
||||
function handleLaunchGame(location, shortName, desktop) {
|
||||
if (isGameRunning.value) {
|
||||
modalStore
|
||||
@@ -280,10 +293,21 @@
|
||||
isVisible.value = false;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param location
|
||||
* @param shortName
|
||||
*/
|
||||
function handleLaunchDefault(location, shortName) {
|
||||
handleLaunchGame(location, shortName, launchDialog.value.desktop);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param command
|
||||
* @param location
|
||||
* @param shortName
|
||||
*/
|
||||
function handleLaunchCommand(command, location, shortName) {
|
||||
const desktop = command === 'desktop';
|
||||
configRepository.setBool('launchAsDesktop', desktop);
|
||||
@@ -293,10 +317,20 @@
|
||||
launchDialog.value.desktop = desktop;
|
||||
}, 500);
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param location
|
||||
* @param shortName
|
||||
*/
|
||||
function handleAttachGame(location, shortName) {
|
||||
tryOpenInstanceInVrc(location, shortName);
|
||||
isVisible.value = false;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param location
|
||||
* @param shortName
|
||||
*/
|
||||
function selfInvite(location, shortName) {
|
||||
const L = parseLocation(location);
|
||||
if (!L.isRealInstance) {
|
||||
@@ -314,9 +348,15 @@
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
function getConfig() {
|
||||
configRepository.getBool('launchAsDesktop').then((value) => (launchDialog.value.desktop = value));
|
||||
}
|
||||
/**
|
||||
*
|
||||
*/
|
||||
async function initLaunchDialog() {
|
||||
const { tag, shortName } = launchDialogData.value;
|
||||
if (!isRealInstance(tag)) {
|
||||
@@ -361,6 +401,10 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param input
|
||||
*/
|
||||
async function copyInstanceMessage(input) {
|
||||
try {
|
||||
await navigator.clipboard.writeText(input);
|
||||
|
||||
@@ -63,9 +63,9 @@
|
||||
import { storeToRefs } from 'pinia';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import { groupRequest, userRequest } from '../../api';
|
||||
import { hasGroupModerationPermission, userImage } from '../../shared/utils';
|
||||
import { VirtualCombobox } from '../ui/virtual-combobox';
|
||||
import { queryRequest } from '../../api';
|
||||
import { useGroupStore } from '../../stores';
|
||||
|
||||
const { currentUserGroups, moderateGroupDialog } = storeToRefs(useGroupStore());
|
||||
@@ -114,8 +114,8 @@
|
||||
function initDialog() {
|
||||
const D = moderateGroupDialog.value;
|
||||
if (D.groupId) {
|
||||
groupRequest
|
||||
.getCachedGroup({
|
||||
queryRequest
|
||||
.fetch('group', {
|
||||
groupId: D.groupId
|
||||
})
|
||||
.then((args) => {
|
||||
@@ -127,7 +127,7 @@
|
||||
}
|
||||
|
||||
if (D.userId) {
|
||||
userRequest.getCachedUser({ userId: D.userId }).then((args) => {
|
||||
queryRequest.fetch('user', { userId: D.userId }).then((args) => {
|
||||
D.userObject = args.ref;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -580,7 +580,7 @@
|
||||
useUserStore
|
||||
} from '../../stores';
|
||||
import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from '../ui/select';
|
||||
import { groupRequest, instanceRequest, worldRequest } from '../../api';
|
||||
import { groupRequest, instanceRequest, queryRequest } from '../../api';
|
||||
import { ToggleGroup, ToggleGroupItem } from '../ui/toggle-group';
|
||||
import { VirtualCombobox } from '../ui/virtual-combobox';
|
||||
|
||||
@@ -797,8 +797,8 @@
|
||||
return;
|
||||
}
|
||||
const L = parseLocation(tag);
|
||||
worldRequest
|
||||
.getCachedWorld({
|
||||
queryRequest
|
||||
.fetch('world', {
|
||||
worldId: L.worldId
|
||||
})
|
||||
.then((args) => {
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
import { storeToRefs } from 'pinia';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import { miscRequest, notificationRequest, userRequest } from '../../api';
|
||||
import { miscRequest, notificationRequest, queryRequest } from '../../api';
|
||||
import { useGalleryStore, useNotificationStore, useUserStore } from '../../stores';
|
||||
import { VirtualCombobox } from '../ui/virtual-combobox';
|
||||
import { photonEmojis } from '../../shared/constants/photon.js';
|
||||
@@ -99,7 +99,7 @@
|
||||
(visible) => {
|
||||
if (visible) {
|
||||
displayName.value = '';
|
||||
userRequest.getCachedUser({ userId: sendBoopDialog.value.userId }).then((user) => {
|
||||
queryRequest.fetch('user', { userId: sendBoopDialog.value.userId }).then((user) => {
|
||||
displayName.value = user.ref.displayName;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
import DeprecationAlert from '@/components/DeprecationAlert.vue';
|
||||
|
||||
import { useFavoriteStore, useUserStore, useWorldStore } from '../../../stores';
|
||||
import { favoriteRequest } from '../../../api';
|
||||
import { queryRequest } from '../../../api';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
favoriteWorldsTab.value = '0';
|
||||
userDialog.value.userFavoriteWorlds = [];
|
||||
const worldLists = [];
|
||||
const groupArgs = await favoriteRequest.getCachedFavoriteGroups({
|
||||
const groupArgs = await queryRequest.fetch('favoriteGroups', {
|
||||
ownerId: userId,
|
||||
n: 100,
|
||||
offset: 0
|
||||
@@ -145,7 +145,7 @@
|
||||
tag: list.name
|
||||
};
|
||||
try {
|
||||
const args = await favoriteRequest.getCachedFavoriteWorlds(params);
|
||||
const args = await queryRequest.fetch('favoriteWorlds', params);
|
||||
handleFavoriteWorldList(args);
|
||||
return [list.displayName, list.visibility, args.json];
|
||||
} catch (err) {
|
||||
|
||||
@@ -87,8 +87,8 @@
|
||||
|
||||
import { useUserStore, useWorldStore } from '../../../stores';
|
||||
import { userDialogWorldOrderOptions, userDialogWorldSortingOptions } from '../../../shared/constants/';
|
||||
import { queryRequest } from '../../../api';
|
||||
import { useOptionKeySelect } from '../../../composables/useOptionKeySelect';
|
||||
import { worldRequest } from '../../../api';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
try {
|
||||
let offset = 0;
|
||||
while (true) {
|
||||
const args = await worldRequest.getCachedWorlds({
|
||||
const args = await queryRequest.fetch('worldsByUser', {
|
||||
...params,
|
||||
offset
|
||||
});
|
||||
|
||||
@@ -6,7 +6,7 @@ import {
|
||||
miscRequest,
|
||||
notificationRequest,
|
||||
playerModerationRequest,
|
||||
worldRequest
|
||||
queryRequest
|
||||
} from '../../../api';
|
||||
import { copyToClipboard, parseLocation } from '../../../shared/utils';
|
||||
import { database } from '../../../service/database';
|
||||
@@ -259,8 +259,8 @@ export function useUserDialogCommands(
|
||||
},
|
||||
'Invite Message': () => {
|
||||
const L = parseLocation(lastLocation.value.location);
|
||||
worldRequest
|
||||
.getCachedWorld({
|
||||
queryRequest
|
||||
.fetch('world', {
|
||||
worldId: L.worldId
|
||||
})
|
||||
.then((args) => {
|
||||
@@ -288,8 +288,8 @@ export function useUserDialogCommands(
|
||||
currentLocation = lastLocationDestination.value;
|
||||
}
|
||||
const L = parseLocation(currentLocation);
|
||||
worldRequest
|
||||
.getCachedWorld({
|
||||
queryRequest
|
||||
.fetch('world', {
|
||||
worldId: L.worldId
|
||||
})
|
||||
.then((args) => {
|
||||
|
||||
Reference in New Issue
Block a user