diff --git a/src/api/__tests__/entityQuerySync.test.js b/src/api/__tests__/entityQuerySync.test.js index 231301d2..5381f0e3 100644 --- a/src/api/__tests__/entityQuerySync.test.js +++ b/src/api/__tests__/entityQuerySync.test.js @@ -23,7 +23,7 @@ vi.mock('../../stores', () => ({ }) })); -vi.mock('../../query', () => ({ +vi.mock('../../queries', () => ({ entityQueryPolicies: { user: { staleTime: 20000, gcTime: 90000, retry: 1, refetchOnWindowFocus: false }, avatar: { staleTime: 60000, gcTime: 300000, retry: 1, refetchOnWindowFocus: false }, diff --git a/src/api/__tests__/favoriteQuerySync.test.js b/src/api/__tests__/favoriteQuerySync.test.js index 26b43ff6..11cb2bd4 100644 --- a/src/api/__tests__/favoriteQuerySync.test.js +++ b/src/api/__tests__/favoriteQuerySync.test.js @@ -23,7 +23,7 @@ vi.mock('../../stores', () => ({ }) })); -vi.mock('../../query', () => ({ +vi.mock('../../queries', () => ({ entityQueryPolicies: { favoriteCollection: { staleTime: 60000, diff --git a/src/api/__tests__/friendQuerySync.test.js b/src/api/__tests__/friendQuerySync.test.js index d3a9c88f..2a39b0c6 100644 --- a/src/api/__tests__/friendQuerySync.test.js +++ b/src/api/__tests__/friendQuerySync.test.js @@ -15,7 +15,7 @@ vi.mock('../../stores/user', () => ({ }) })); -vi.mock('../../query', () => ({ +vi.mock('../../queries', () => ({ entityQueryPolicies: { friendList: { staleTime: 20000, diff --git a/src/api/__tests__/groupQuerySync.test.js b/src/api/__tests__/groupQuerySync.test.js index 8fa841f1..08cf43cb 100644 --- a/src/api/__tests__/groupQuerySync.test.js +++ b/src/api/__tests__/groupQuerySync.test.js @@ -18,7 +18,7 @@ vi.mock('../../stores', () => ({ }) })); -vi.mock('../../query', () => ({ +vi.mock('../../queries', () => ({ entityQueryPolicies: { group: { staleTime: 60000, diff --git a/src/api/__tests__/mediaQuerySync.test.js b/src/api/__tests__/mediaQuerySync.test.js index b6e5ecae..00693267 100644 --- a/src/api/__tests__/mediaQuerySync.test.js +++ b/src/api/__tests__/mediaQuerySync.test.js @@ -15,7 +15,7 @@ vi.mock('../../stores', () => ({ }) })); -vi.mock('../../query', () => ({ +vi.mock('../../queries', () => ({ entityQueryPolicies: { galleryCollection: { staleTime: 60000, diff --git a/src/api/avatar.js b/src/api/avatar.js index a60eeba0..af782d5c 100644 --- a/src/api/avatar.js +++ b/src/api/avatar.js @@ -5,7 +5,7 @@ import { fetchWithEntityPolicy, patchAndRefetchActiveQuery, queryKeys -} from '../query'; +} from '../queries'; const avatarReq = { /** diff --git a/src/api/favorite.js b/src/api/favorite.js index 5474b2e7..c1446782 100644 --- a/src/api/favorite.js +++ b/src/api/favorite.js @@ -5,7 +5,7 @@ import { fetchWithEntityPolicy, queryClient, queryKeys -} from '../query'; +} from '../queries'; function getCurrentUserId() { return useUserStore().currentUser.id; diff --git a/src/api/friend.js b/src/api/friend.js index 29d0a53d..4ae1f9d4 100644 --- a/src/api/friend.js +++ b/src/api/friend.js @@ -5,7 +5,7 @@ import { fetchWithEntityPolicy, queryClient, queryKeys -} from '../query'; +} from '../queries'; function refetchActiveFriendListQueries() { queryClient diff --git a/src/api/group.js b/src/api/group.js index 9b95033f..f19ead15 100644 --- a/src/api/group.js +++ b/src/api/group.js @@ -5,7 +5,7 @@ import { fetchWithEntityPolicy, queryClient, queryKeys -} from '../query'; +} from '../queries'; function getCurrentUserId() { return useUserStore().currentUser.id; diff --git a/src/api/instance.js b/src/api/instance.js index a2bd225a..baeb79ac 100644 --- a/src/api/instance.js +++ b/src/api/instance.js @@ -8,7 +8,7 @@ import { fetchWithEntityPolicy, patchAndRefetchActiveQuery, queryKeys -} from '../query'; +} from '../queries'; const instanceReq = { /** diff --git a/src/api/inventory.js b/src/api/inventory.js index 7c476841..2b9a61da 100644 --- a/src/api/inventory.js +++ b/src/api/inventory.js @@ -4,7 +4,7 @@ import { fetchWithEntityPolicy, queryClient, queryKeys -} from '../query'; +} from '../queries'; function refetchActiveInventoryQueries() { queryClient diff --git a/src/api/misc.js b/src/api/misc.js index b86d0b58..3c2d601f 100644 --- a/src/api/misc.js +++ b/src/api/misc.js @@ -5,7 +5,7 @@ import { fetchWithEntityPolicy, queryClient, queryKeys -} from '../query'; +} from '../queries'; function getCurrentUserId() { return useUserStore().currentUser.id; diff --git a/src/api/user.js b/src/api/user.js index fbf2d773..2f96bf03 100644 --- a/src/api/user.js +++ b/src/api/user.js @@ -5,7 +5,7 @@ import { fetchWithEntityPolicy, patchAndRefetchActiveQuery, queryKeys -} from '../query'; +} from '../queries'; /** * @returns {string} diff --git a/src/api/vrcPlusIcon.js b/src/api/vrcPlusIcon.js index 453b577b..ddd9c114 100644 --- a/src/api/vrcPlusIcon.js +++ b/src/api/vrcPlusIcon.js @@ -4,7 +4,7 @@ import { fetchWithEntityPolicy, queryClient, queryKeys -} from '../query'; +} from '../queries'; function refetchActiveGalleryQueries() { queryClient diff --git a/src/api/vrcPlusImage.js b/src/api/vrcPlusImage.js index dc421f97..88596972 100644 --- a/src/api/vrcPlusImage.js +++ b/src/api/vrcPlusImage.js @@ -5,7 +5,7 @@ import { fetchWithEntityPolicy, queryClient, queryKeys -} from '../query'; +} from '../queries'; function getCurrentUserId() { return useUserStore().currentUser.id; diff --git a/src/api/world.js b/src/api/world.js index bc37296c..c01f8c1c 100644 --- a/src/api/world.js +++ b/src/api/world.js @@ -5,7 +5,7 @@ import { fetchWithEntityPolicy, patchAndRefetchActiveQuery, queryKeys -} from '../query'; +} from '../queries'; const worldReq = { /** diff --git a/src/app.js b/src/app.js index 31e7cc9e..8508c448 100644 --- a/src/app.js +++ b/src/app.js @@ -9,7 +9,7 @@ import { initSentry } from './plugin'; import { initPiniaPlugins, pinia } from './stores'; -import { queryClient } from './query'; +import { queryClient } from './queries'; import App from './App.vue'; diff --git a/src/query/__tests__/entityCache.test.js b/src/queries/__tests__/entityCache.test.js similarity index 100% rename from src/query/__tests__/entityCache.test.js rename to src/queries/__tests__/entityCache.test.js diff --git a/src/query/__tests__/keys.test.js b/src/queries/__tests__/keys.test.js similarity index 100% rename from src/query/__tests__/keys.test.js rename to src/queries/__tests__/keys.test.js diff --git a/src/query/__tests__/policies.test.js b/src/queries/__tests__/policies.test.js similarity index 100% rename from src/query/__tests__/policies.test.js rename to src/queries/__tests__/policies.test.js diff --git a/src/query/client.js b/src/queries/client.js similarity index 100% rename from src/query/client.js rename to src/queries/client.js diff --git a/src/query/entityCache.js b/src/queries/entityCache.js similarity index 82% rename from src/query/entityCache.js rename to src/queries/entityCache.js index 96e842a3..a34e3916 100644 --- a/src/query/entityCache.js +++ b/src/queries/entityCache.js @@ -22,7 +22,11 @@ function getComparableEntity(data) { if (data.ref && typeof data.ref === 'object') { return data.ref; } - if (data.json && typeof data.json === 'object' && !Array.isArray(data.json)) { + if ( + data.json && + typeof data.json === 'object' && + !Array.isArray(data.json) + ) { return data.json; } return data; @@ -137,8 +141,10 @@ export async function patchAndRefetchActiveQuery({ queryKey, nextData }) { */ export function patchUserFromEvent(ref) { if (!ref?.id) return; + const queryKey = queryKeys.user(ref.id); + if (!queryClient.getQueryData(queryKey)) return; patchQueryDataWithRecency({ - queryKey: queryKeys.user(ref.id), + queryKey, nextData: { cache: false, json: ref, @@ -153,8 +159,10 @@ export function patchUserFromEvent(ref) { */ export function patchAvatarFromEvent(ref) { if (!ref?.id) return; + const queryKey = queryKeys.avatar(ref.id); + if (!queryClient.getQueryData(queryKey)) return; patchQueryDataWithRecency({ - queryKey: queryKeys.avatar(ref.id), + queryKey, nextData: { cache: false, json: ref, @@ -169,8 +177,10 @@ export function patchAvatarFromEvent(ref) { */ export function patchWorldFromEvent(ref) { if (!ref?.id) return; + const queryKey = queryKeys.world(ref.id); + if (!queryClient.getQueryData(queryKey)) return; patchQueryDataWithRecency({ - queryKey: queryKeys.world(ref.id), + queryKey, nextData: { cache: false, json: ref, @@ -193,15 +203,21 @@ export function patchGroupFromEvent(ref) { ref }; - patchQueryDataWithRecency({ - queryKey: queryKeys.group(ref.id, false), - nextData - }); + const keyFalse = queryKeys.group(ref.id, false); + if (queryClient.getQueryData(keyFalse)) { + patchQueryDataWithRecency({ + queryKey: keyFalse, + nextData + }); + } - patchQueryDataWithRecency({ - queryKey: queryKeys.group(ref.id, true), - nextData - }); + const keyTrue = queryKeys.group(ref.id, true); + if (queryClient.getQueryData(keyTrue)) { + patchQueryDataWithRecency({ + queryKey: keyTrue, + nextData + }); + } } /** @@ -213,8 +229,11 @@ export function patchInstanceFromEvent(ref) { const [worldId, instanceId] = String(ref.id).split(':'); if (!worldId || !instanceId) return; + const queryKey = queryKeys.instance(worldId, instanceId); + if (!queryClient.getQueryData(queryKey)) return; + patchQueryDataWithRecency({ - queryKey: queryKeys.instance(worldId, instanceId), + queryKey, nextData: { cache: false, json: ref, diff --git a/src/query/index.js b/src/queries/index.js similarity index 100% rename from src/query/index.js rename to src/queries/index.js diff --git a/src/query/keys.js b/src/queries/keys.js similarity index 100% rename from src/query/keys.js rename to src/queries/keys.js diff --git a/src/query/policies.js b/src/queries/policies.js similarity index 100% rename from src/query/policies.js rename to src/queries/policies.js diff --git a/src/query/useEntityQueries.js b/src/queries/useEntityQueries.js similarity index 100% rename from src/query/useEntityQueries.js rename to src/queries/useEntityQueries.js diff --git a/src/stores/auth.js b/src/stores/auth.js index 485b52cf..cca7342a 100644 --- a/src/stores/auth.js +++ b/src/stores/auth.js @@ -12,7 +12,7 @@ import { createAuthAutoLoginCoordinator } from './coordinators/authAutoLoginCoor import { createAuthCoordinator } from './coordinators/authCoordinator'; import { database } from '../service/database'; import { escapeTag } from '../shared/utils'; -import { queryClient } from '../query'; +import { queryClient } from '../queries'; import { request } from '../service/request'; import { useAdvancedSettingsStore } from './settings/advanced'; import { useGeneralSettingsStore } from './settings/general'; diff --git a/src/stores/avatar.js b/src/stores/avatar.js index 789dbb87..2242e1cd 100644 --- a/src/stores/avatar.js +++ b/src/stores/avatar.js @@ -17,7 +17,7 @@ import { import { avatarRequest, miscRequest } from '../api'; import { AppDebug } from '../service/appConfig'; import { database } from '../service/database'; -import { patchAvatarFromEvent } from '../query'; +import { patchAvatarFromEvent } from '../queries'; import { processBulk } from '../service/request'; import { useAdvancedSettingsStore } from './settings/advanced'; import { useAvatarProviderStore } from './avatarProvider'; diff --git a/src/stores/group.js b/src/stores/group.js index 4555ccd7..023bbfe0 100644 --- a/src/stores/group.js +++ b/src/stores/group.js @@ -18,7 +18,7 @@ import { } from '../api'; import { database } from '../service/database'; import { groupDialogFilterOptions } from '../shared/constants/'; -import { patchGroupFromEvent } from '../query'; +import { patchGroupFromEvent } from '../queries'; import { useGameStore } from './game'; import { useInstanceStore } from './instance'; import { useModalStore } from './modal'; @@ -170,7 +170,7 @@ export const useGroupStore = defineStore('Group', () => { D.calendar = []; const loadGroupRequest = groupRequest.getGroup({ groupId, - includeRoles: false + includeRoles: true }); loadGroupRequest @@ -208,7 +208,7 @@ export const useGroupStore = defineStore('Group', () => { } }); instanceStore.applyGroupDialogInstances(); - getGroupDialogGroup(groupId); + getGroupDialogGroup(groupId, ref); } }); } @@ -457,17 +457,25 @@ export const useGroupStore = defineStore('Group', () => { /** * * @param groupId + * @param {object} [existingRef] + * @returns { Promise } */ - function getGroupDialogGroup(groupId) { + function getGroupDialogGroup(groupId, existingRef) { const D = groupDialog.value; D.isGetGroupDialogGroupLoading = false; - return groupRequest - .getCachedGroup({ groupId, includeRoles: true }) + + const refPromise = existingRef + ? Promise.resolve({ ref: existingRef }) + : groupRequest + .getCachedGroup({ groupId, includeRoles: true }) + .then((args) => ({ ref: applyGroup(args.json), args })); + + return refPromise .catch((err) => { throw err; }) - .then((args) => { - const ref = applyGroup(args.json); + .then((result) => { + const ref = result.ref; if (D.id === ref.id) { D.loading = false; D.ref = ref; @@ -537,7 +545,7 @@ export const useGroupStore = defineStore('Group', () => { }); } nextTick(() => (D.isGetGroupDialogGroupLoading = false)); - return args; + return result.args || result; }); } diff --git a/src/stores/instance.js b/src/stores/instance.js index d2f3e00c..9b86db83 100644 --- a/src/stores/instance.js +++ b/src/stores/instance.js @@ -33,7 +33,7 @@ import { instanceContentSettings } from '../shared/constants'; import { database } from '../service/database'; -import { patchInstanceFromEvent } from '../query'; +import { patchInstanceFromEvent } from '../queries'; import { resolveRef } from '../shared/utils/resolveRef'; import { useAppearanceSettingsStore } from './settings/appearance'; import { useFriendStore } from './friend'; diff --git a/src/stores/user.js b/src/stores/user.js index 75c044c6..3afd0c6b 100644 --- a/src/stores/user.js +++ b/src/stores/user.js @@ -36,7 +36,7 @@ import { AppDebug } from '../service/appConfig'; import { createUserEventCoordinator } from './coordinators/userEventCoordinator'; import { createUserSessionCoordinator } from './coordinators/userSessionCoordinator'; import { database } from '../service/database'; -import { patchUserFromEvent } from '../query'; +import { patchUserFromEvent } from '../queries'; import { useAppearanceSettingsStore } from './settings/appearance'; import { useAuthStore } from './auth'; import { useAvatarStore } from './avatar'; diff --git a/src/stores/world.js b/src/stores/world.js index 1bccc4e2..bb2b2b35 100644 --- a/src/stores/world.js +++ b/src/stores/world.js @@ -16,7 +16,7 @@ import { } from '../shared/utils'; import { instanceRequest, miscRequest, worldRequest } from '../api'; import { database } from '../service/database'; -import { patchWorldFromEvent } from '../query'; +import { patchWorldFromEvent } from '../queries'; import { processBulk } from '../service/request'; import { useFavoriteStore } from './favorite'; import { useInstanceStore } from './instance';