From c4f75e50d7fec9bc9d329b80f446c700682a070c Mon Sep 17 00:00:00 2001 From: pa Date: Fri, 23 Jan 2026 15:55:43 +0900 Subject: [PATCH] tidy up --- .../dialogs/MainDialogContainer.vue | 37 +++++++--------- src/stores/avatar.js | 12 +++--- src/stores/group.js | 12 +++--- src/stores/instance.js | 42 +++++++++++++------ src/stores/ui.js | 18 +++++++- src/stores/user.js | 12 +++--- src/stores/world.js | 12 +++--- 7 files changed, 85 insertions(+), 60 deletions(-) diff --git a/src/components/dialogs/MainDialogContainer.vue b/src/components/dialogs/MainDialogContainer.vue index b4ac3eac..21577577 100644 --- a/src/components/dialogs/MainDialogContainer.vue +++ b/src/components/dialogs/MainDialogContainer.vue @@ -35,28 +35,7 @@ const { previousInstancesInfoDialog, previousInstancesListDialog } = storeToRefs(instanceStore); - const isOpen = computed({ - get: () => - userStore.userDialog.visible || - worldStore.worldDialog.visible || - avatarStore.avatarDialog.visible || - groupStore.groupDialog.visible || - previousInstancesInfoDialog.value.visible || - previousInstancesListDialog.value.visible, - set: (value) => { - if (!value) { - userStore.userDialog.visible = false; - worldStore.worldDialog.visible = false; - avatarStore.avatarDialog.visible = false; - groupStore.groupDialog.visible = false; - instanceStore.hidePreviousInstancesDialogs(); - uiStore.clearDialogCrumbs(); - } - } - }); - const dialogCrumbs = computed(() => uiStore.dialogCrumbs); - const activeCrumb = computed(() => dialogCrumbs.value[dialogCrumbs.value.length - 1] || null); const activeType = computed(() => { const type = (() => { if (previousInstancesInfoDialog.value.visible) { @@ -77,8 +56,7 @@ if (groupStore.groupDialog.visible) { return 'group'; } - const crumb = activeCrumb.value; - return crumb?.type ?? null; + return null; })(); return type; }); @@ -116,6 +94,19 @@ return {}; } }); + const isOpen = computed({ + get: () => activeComponent.value !== null, + set: (value) => { + if (!value) { + userStore.userDialog.visible = false; + worldStore.worldDialog.visible = false; + avatarStore.avatarDialog.visible = false; + groupStore.groupDialog.visible = false; + instanceStore.hidePreviousInstancesDialogs(); + uiStore.clearDialogCrumbs(); + } + } + }); const dialogClass = computed(() => { switch (activeType.value) { diff --git a/src/stores/avatar.js b/src/stores/avatar.js index bbb62906..dbbcfbb6 100644 --- a/src/stores/avatar.js +++ b/src/stores/avatar.js @@ -190,12 +190,12 @@ export const useAvatarStore = defineStore('Avatar', () => { groupStore.groupDialog.visible || instanceStore.previousInstancesInfoDialog.visible || instanceStore.previousInstancesListDialog.visible; - if (!hadActiveDialog) { - uiStore.clearDialogCrumbs(); - } - if (!options.skipBreadcrumb) { - uiStore.pushDialogCrumb('avatar', avatarId); - } + uiStore.openDialog({ + type: 'avatar', + id: avatarId, + skipBreadcrumb: options.skipBreadcrumb, + hadActiveDialog + }); instanceStore.hidePreviousInstancesDialogs(); userStore.userDialog.visible = false; worldStore.worldDialog.visible = false; diff --git a/src/stores/group.js b/src/stores/group.js index 3c39f917..56267cb6 100644 --- a/src/stores/group.js +++ b/src/stores/group.js @@ -142,12 +142,12 @@ export const useGroupStore = defineStore('Group', () => { avatarStore.avatarDialog.visible || instanceStore.previousInstancesInfoDialog.visible || instanceStore.previousInstancesListDialog.visible; - if (!hadActiveDialog) { - uiStore.clearDialogCrumbs(); - } - if (!options.skipBreadcrumb) { - uiStore.pushDialogCrumb('group', groupId); - } + uiStore.openDialog({ + type: 'group', + id: groupId, + skipBreadcrumb: options.skipBreadcrumb, + hadActiveDialog + }); instanceStore.hidePreviousInstancesDialogs(); userStore.userDialog.visible = false; worldStore.worldDialog.visible = false; diff --git a/src/stores/instance.js b/src/stores/instance.js index 12c78855..f6dbe962 100644 --- a/src/stores/instance.js +++ b/src/stores/instance.js @@ -290,15 +290,24 @@ 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; - if (!options.skipBreadcrumb && instanceId) { - uiStore.pushDialogCrumb( - 'previous-instances-info', - instanceId, - formatPreviousInstancesInfoLabel(instanceId) - ); + if (instanceId) { + uiStore.openDialog({ + type: 'previous-instances-info', + id: instanceId, + label: formatPreviousInstancesInfoLabel(instanceId), + skipBreadcrumb: options.skipBreadcrumb, + hadActiveDialog + }); const location = parseLocation(instanceId); if ( location.worldId && @@ -326,6 +335,13 @@ 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; @@ -342,16 +358,18 @@ export const useInstanceStore = defineStore('Instance', () => { previousInstancesListDialog.value.visible = true; previousInstancesListDialog.value.openFlg = true; nextTick(() => (previousInstancesListDialog.value.openFlg = false)); - if (!options.skipBreadcrumb && resolved?.id) { + if (resolved?.id) { const label = variant === 'user' ? resolved.displayName || resolved.id : resolved.name || resolved.id; - uiStore.pushDialogCrumb( - `previous-instances-${variant}`, - resolved.id, - label - ); + uiStore.openDialog({ + type: `previous-instances-${variant}`, + id: resolved.id, + label, + skipBreadcrumb: options.skipBreadcrumb, + hadActiveDialog + }); } } diff --git a/src/stores/ui.js b/src/stores/ui.js index 2dc0db90..4be5581e 100644 --- a/src/stores/ui.js +++ b/src/stores/ui.js @@ -107,6 +107,21 @@ export const useUiStore = defineStore('Ui', () => { dialogCrumbs.value = []; } + function openDialog({ + type, + id, + label = '', + skipBreadcrumb = false, + hadActiveDialog = false + }) { + if (!hadActiveDialog) { + clearDialogCrumbs(); + } + if (!skipBreadcrumb) { + pushDialogCrumb(type, id, label); + } + } + // Make sure file drops outside of the screenshot manager don't navigate to the file path dropped. // This issue persists on prompts created with prompt(), unfortunately. Not sure how to fix that. document.body.addEventListener('drop', function (e) { @@ -191,6 +206,7 @@ export const useUiStore = defineStore('Ui', () => { pushDialogCrumb, setDialogCrumbLabel, jumpDialogCrumb, - clearDialogCrumbs + clearDialogCrumbs, + openDialog }; }); diff --git a/src/stores/user.js b/src/stores/user.js index bfecf607..f1205a51 100644 --- a/src/stores/user.js +++ b/src/stores/user.js @@ -774,12 +774,12 @@ export const useUserStore = defineStore('User', () => { groupStore.groupDialog.visible || instanceStore.previousInstancesInfoDialog.visible || instanceStore.previousInstancesListDialog.visible; - if (!hadActiveDialog) { - uiStore.clearDialogCrumbs(); - } - if (!options.skipBreadcrumb) { - uiStore.pushDialogCrumb('user', userId); - } + uiStore.openDialog({ + type: 'user', + id: userId, + skipBreadcrumb: options.skipBreadcrumb, + hadActiveDialog + }); instanceStore.hidePreviousInstancesDialogs(); worldStore.worldDialog.visible = false; avatarStore.avatarDialog.visible = false; diff --git a/src/stores/world.js b/src/stores/world.js index 24b59200..1c783438 100644 --- a/src/stores/world.js +++ b/src/stores/world.js @@ -91,12 +91,12 @@ export const useWorldStore = defineStore('World', () => { groupStore.groupDialog.visible || instanceStore.previousInstancesInfoDialog.visible || instanceStore.previousInstancesListDialog.visible; - if (!hadActiveDialog) { - uiStore.clearDialogCrumbs(); - } - if (!options.skipBreadcrumb) { - uiStore.pushDialogCrumb('world', L.worldId); - } + uiStore.openDialog({ + type: 'world', + id: L.worldId, + skipBreadcrumb: options.skipBreadcrumb, + hadActiveDialog + }); D.visible = true; instanceStore.hidePreviousInstancesDialogs(); userStore.userDialog.visible = false;