diff --git a/src/components/dialogs/MainDialogContainer.vue b/src/components/dialogs/MainDialogContainer.vue index 21577577..0458424f 100644 --- a/src/components/dialogs/MainDialogContainer.vue +++ b/src/components/dialogs/MainDialogContainer.vue @@ -143,22 +143,18 @@ } uiStore.jumpDialogCrumb(index); if (item.type === 'user') { - instanceStore.hidePreviousInstancesDialogs(); userStore.showUserDialog(item.id, { skipBreadcrumb: true }); return; } if (item.type === 'world') { - instanceStore.hidePreviousInstancesDialogs(); worldStore.showWorldDialog(item.id, null, { skipBreadcrumb: true }); return; } if (item.type === 'avatar') { - instanceStore.hidePreviousInstancesDialogs(); avatarStore.showAvatarDialog(item.id, { skipBreadcrumb: true }); return; } if (item.type === 'group') { - instanceStore.hidePreviousInstancesDialogs(); groupStore.showGroupDialog(item.id, { skipBreadcrumb: true }); return; } diff --git a/src/components/dialogs/PreviousInstancesDialog/PreviousInstancesListDialog.vue b/src/components/dialogs/PreviousInstancesDialog/PreviousInstancesListDialog.vue index 48e8a643..a488b119 100644 --- a/src/components/dialogs/PreviousInstancesDialog/PreviousInstancesListDialog.vue +++ b/src/components/dialogs/PreviousInstancesDialog/PreviousInstancesListDialog.vue @@ -278,13 +278,4 @@ }, { immediate: true } ); - - watch( - () => dialogState.value?.openFlg, - () => { - if (dialogState.value?.visible) { - refreshTable(); - } - } - ); diff --git a/src/stores/avatar.js b/src/stores/avatar.js index dbbcfbb6..0b6048fb 100644 --- a/src/stores/avatar.js +++ b/src/stores/avatar.js @@ -18,13 +18,10 @@ import { database } from '../service/database'; import { useAdvancedSettingsStore } from './settings/advanced'; import { useAvatarProviderStore } from './avatarProvider'; import { useFavoriteStore } from './favorite'; -import { useGroupStore } from './group'; -import { useInstanceStore } from './instance'; import { useModalStore } from './modal'; import { useUiStore } from './ui'; import { useUserStore } from './user'; import { useVRCXUpdaterStore } from './vrcxUpdater'; -import { useWorldStore } from './world'; import { watchState } from '../service/watchState'; import webApiService from '../service/webapi'; @@ -34,10 +31,7 @@ export const useAvatarStore = defineStore('Avatar', () => { const avatarProviderStore = useAvatarProviderStore(); const vrcxUpdaterStore = useVRCXUpdaterStore(); const advancedSettingsStore = useAdvancedSettingsStore(); - const instanceStore = useInstanceStore(); const userStore = useUserStore(); - const worldStore = useWorldStore(); - const groupStore = useGroupStore(); const modalStore = useModalStore(); const uiStore = useUiStore(); const { t } = useI18n(); @@ -183,23 +177,11 @@ export const useAvatarStore = defineStore('Avatar', () => { */ function showAvatarDialog(avatarId, options = {}) { const D = avatarDialog.value; - const hadActiveDialog = - avatarDialog.value.visible || - userStore.userDialog.visible || - worldStore.worldDialog.visible || - groupStore.groupDialog.visible || - instanceStore.previousInstancesInfoDialog.visible || - instanceStore.previousInstancesListDialog.visible; uiStore.openDialog({ type: 'avatar', id: avatarId, - skipBreadcrumb: options.skipBreadcrumb, - hadActiveDialog + skipBreadcrumb: options.skipBreadcrumb }); - instanceStore.hidePreviousInstancesDialogs(); - userStore.userDialog.visible = false; - worldStore.worldDialog.visible = false; - groupStore.groupDialog.visible = false; D.loading = true; D.id = avatarId; @@ -233,9 +215,11 @@ export const useAvatarStore = defineStore('Avatar', () => { ref2.authorId !== userStore.currentUser.id ) { D.loading = false; + D.visible = false; return; } } + D.visible = true; avatarRequest .getAvatar({ avatarId }) .then((args) => { @@ -247,7 +231,6 @@ export const useAvatarStore = defineStore('Avatar', () => { D.ref?.name || D.id ); getAvatarGallery(avatarId); - D.visible = true; updateVRChatAvatarCache(); if (/quest/.test(ref.tags)) { D.isQuestFallback = true; diff --git a/src/stores/group.js b/src/stores/group.js index 56267cb6..9de806d3 100644 --- a/src/stores/group.js +++ b/src/stores/group.js @@ -135,24 +135,13 @@ export const useGroupStore = defineStore('Group', () => { if (!groupId) { return; } - const hadActiveDialog = - groupDialog.value.visible || - userStore.userDialog.visible || - worldStore.worldDialog.visible || - avatarStore.avatarDialog.visible || - instanceStore.previousInstancesInfoDialog.visible || - instanceStore.previousInstancesListDialog.visible; uiStore.openDialog({ type: 'group', id: groupId, - skipBreadcrumb: options.skipBreadcrumb, - hadActiveDialog + skipBreadcrumb: options.skipBreadcrumb }); - instanceStore.hidePreviousInstancesDialogs(); - userStore.userDialog.visible = false; - worldStore.worldDialog.visible = false; - avatarStore.avatarDialog.visible = false; const D = groupDialog.value; + D.visible = true; D.loading = true; D.id = groupId; D.inGroup = false; diff --git a/src/stores/instance.js b/src/stores/instance.js index f6dbe962..a1892224 100644 --- a/src/stores/instance.js +++ b/src/stores/instance.js @@ -117,7 +117,6 @@ export const useInstanceStore = defineStore('Instance', () => { const previousInstancesListDialog = ref({ visible: false, - openFlg: false, variant: 'user', userRef: { id: '', @@ -148,9 +147,7 @@ export const useInstanceStore = defineStore('Instance', () => { (isLoggedIn) => { currentInstanceUsersData.value = []; instanceJoinHistory.clear(); - previousInstancesInfoDialog.value.visible = false; - previousInstancesListDialog.value.visible = false; - previousInstancesListDialog.value.openFlg = false; + hidePreviousInstancesDialogs(); cachedInstances.clear(); queuedInstances.clear(); if (isLoggedIn) { @@ -188,7 +185,6 @@ export const useInstanceStore = defineStore('Instance', () => { function hidePreviousInstancesDialogs() { previousInstancesInfoDialog.value.visible = false; previousInstancesListDialog.value.visible = false; - previousInstancesListDialog.value.openFlg = false; } async function resolveUserRef(input) { @@ -290,24 +286,17 @@ export const useInstanceStore = defineStore('Instance', () => { } function showPreviousInstancesInfoDialog(instanceId, options = {}) { - const hadActiveDialog = - userStore.userDialog.visible || - worldStore.worldDialog.visible || - groupStore.groupDialog.visible || - previousInstancesInfoDialog.value.visible || - previousInstancesListDialog.value.visible || - uiStore.dialogCrumbs.length > 0; - hidePreviousInstancesDialogs(); previousInstancesInfoDialog.value.visible = true; previousInstancesInfoDialog.value.instanceId = instanceId; + uiStore.openDialog({ + type: 'previous-instances-info', + id: instanceId || '', + label: instanceId + ? formatPreviousInstancesInfoLabel(instanceId) + : '', + skipBreadcrumb: options.skipBreadcrumb + }); if (instanceId) { - uiStore.openDialog({ - type: 'previous-instances-info', - id: instanceId, - label: formatPreviousInstancesInfoLabel(instanceId), - skipBreadcrumb: options.skipBreadcrumb, - hadActiveDialog - }); const location = parseLocation(instanceId); if ( location.worldId && @@ -335,14 +324,6 @@ export const useInstanceStore = defineStore('Instance', () => { targetRef, options = {} ) { - const hadActiveDialog = - userStore.userDialog.visible || - worldStore.worldDialog.visible || - groupStore.groupDialog.visible || - previousInstancesInfoDialog.value.visible || - previousInstancesListDialog.value.visible || - uiStore.dialogCrumbs.length > 0; - hidePreviousInstancesDialogs(); previousInstancesListDialog.value.variant = variant; let resolved = null; if (variant === 'user') { @@ -356,21 +337,18 @@ export const useInstanceStore = defineStore('Instance', () => { previousInstancesListDialog.value.groupRef = resolved; } previousInstancesListDialog.value.visible = true; - previousInstancesListDialog.value.openFlg = true; - nextTick(() => (previousInstancesListDialog.value.openFlg = false)); - if (resolved?.id) { - const label = - variant === 'user' - ? resolved.displayName || resolved.id - : resolved.name || resolved.id; - uiStore.openDialog({ - type: `previous-instances-${variant}`, - id: resolved.id, - label, - skipBreadcrumb: options.skipBreadcrumb, - hadActiveDialog - }); - } + const dialogId = resolved?.id || ''; + const label = resolved?.id + ? variant === 'user' + ? resolved.displayName || resolved.id + : resolved.name || resolved.id + : ''; + uiStore.openDialog({ + type: `previous-instances-${variant}`, + id: dialogId, + label, + skipBreadcrumb: options.skipBreadcrumb + }); } function updateCurrentInstanceWorld() { diff --git a/src/stores/ui.js b/src/stores/ui.js index 4be5581e..5ecc0083 100644 --- a/src/stores/ui.js +++ b/src/stores/ui.js @@ -8,8 +8,13 @@ import { AppDebug } from '../service/appConfig'; import { refreshCustomCss } from '../shared/utils/base/ui'; import { updateLocalizedStrings } from '../plugin/i18n'; import { useAppearanceSettingsStore } from './settings/appearance'; +import { useAvatarStore } from './avatar'; +import { useGroupStore } from './group'; +import { useInstanceStore } from './instance'; import { useNotificationStore } from './notification'; import { useSearchStore } from './search'; +import { useUserStore } from './user'; +import { useWorldStore } from './world'; export const useUiStore = defineStore('Ui', () => { const notificationStore = useNotificationStore(); @@ -107,13 +112,45 @@ export const useUiStore = defineStore('Ui', () => { dialogCrumbs.value = []; } - function openDialog({ - type, - id, - label = '', - skipBreadcrumb = false, - hadActiveDialog = false - }) { + function openDialog({ type, id, label = '', skipBreadcrumb = false }) { + const userStore = useUserStore(); + const worldStore = useWorldStore(); + const avatarStore = useAvatarStore(); + const groupStore = useGroupStore(); + const instanceStore = useInstanceStore(); + const isPrevInfo = type === 'previous-instances-info'; + const isPrevList = + type && + type.startsWith('previous-instances-') && + type !== 'previous-instances-info'; + const hadActiveDialog = + dialogCrumbs.value.length > 0 || + userStore.userDialog.visible || + worldStore.worldDialog.visible || + avatarStore.avatarDialog.visible || + groupStore.groupDialog.visible || + (instanceStore.previousInstancesInfoDialog.visible && + !isPrevInfo) || + (instanceStore.previousInstancesListDialog.visible && !isPrevList); + + if (type !== 'user') { + userStore.userDialog.visible = false; + } + if (type !== 'world') { + worldStore.worldDialog.visible = false; + } + if (type !== 'avatar') { + avatarStore.avatarDialog.visible = false; + } + if (type !== 'group') { + groupStore.groupDialog.visible = false; + } + if (!isPrevInfo) { + instanceStore.previousInstancesInfoDialog.visible = false; + } + if (!isPrevList) { + instanceStore.previousInstancesListDialog.visible = false; + } if (!hadActiveDialog) { clearDialogCrumbs(); } diff --git a/src/stores/user.js b/src/stores/user.js index f1205a51..f5929d74 100644 --- a/src/stores/user.js +++ b/src/stores/user.js @@ -767,24 +767,13 @@ export const useUserStore = defineStore('User', () => { ) { return; } - const hadActiveDialog = - userDialog.value.visible || - worldStore.worldDialog.visible || - avatarStore.avatarDialog.visible || - groupStore.groupDialog.visible || - instanceStore.previousInstancesInfoDialog.visible || - instanceStore.previousInstancesListDialog.visible; uiStore.openDialog({ type: 'user', id: userId, - skipBreadcrumb: options.skipBreadcrumb, - hadActiveDialog + skipBreadcrumb: options.skipBreadcrumb }); - instanceStore.hidePreviousInstancesDialogs(); - worldStore.worldDialog.visible = false; - avatarStore.avatarDialog.visible = false; - groupStore.groupDialog.visible = false; const D = userDialog.value; + D.visible = true; D.id = userId; D.treeData = {}; D.memo = ''; diff --git a/src/stores/world.js b/src/stores/world.js index 1c783438..e31ba283 100644 --- a/src/stores/world.js +++ b/src/stores/world.js @@ -84,24 +84,12 @@ export const useWorldStore = defineStore('World', () => { if (L.worldId === '') { return; } - const hadActiveDialog = - worldDialog.visible || - userStore.userDialog.visible || - avatarStore.avatarDialog.visible || - groupStore.groupDialog.visible || - instanceStore.previousInstancesInfoDialog.visible || - instanceStore.previousInstancesListDialog.visible; uiStore.openDialog({ type: 'world', id: L.worldId, - skipBreadcrumb: options.skipBreadcrumb, - hadActiveDialog + skipBreadcrumb: options.skipBreadcrumb }); D.visible = true; - instanceStore.hidePreviousInstancesDialogs(); - userStore.userDialog.visible = false; - avatarStore.avatarDialog.visible = false; - groupStore.groupDialog.visible = false; L.shortName = shortName; D.id = L.worldId; D.$location = L;