This commit is contained in:
pa
2026-01-23 15:55:43 +09:00
parent 739418733d
commit c4f75e50d7
7 changed files with 85 additions and 60 deletions

View File

@@ -35,28 +35,7 @@
const { previousInstancesInfoDialog, previousInstancesListDialog } = storeToRefs(instanceStore); 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 dialogCrumbs = computed(() => uiStore.dialogCrumbs);
const activeCrumb = computed(() => dialogCrumbs.value[dialogCrumbs.value.length - 1] || null);
const activeType = computed(() => { const activeType = computed(() => {
const type = (() => { const type = (() => {
if (previousInstancesInfoDialog.value.visible) { if (previousInstancesInfoDialog.value.visible) {
@@ -77,8 +56,7 @@
if (groupStore.groupDialog.visible) { if (groupStore.groupDialog.visible) {
return 'group'; return 'group';
} }
const crumb = activeCrumb.value; return null;
return crumb?.type ?? null;
})(); })();
return type; return type;
}); });
@@ -116,6 +94,19 @@
return {}; 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(() => { const dialogClass = computed(() => {
switch (activeType.value) { switch (activeType.value) {

View File

@@ -190,12 +190,12 @@ export const useAvatarStore = defineStore('Avatar', () => {
groupStore.groupDialog.visible || groupStore.groupDialog.visible ||
instanceStore.previousInstancesInfoDialog.visible || instanceStore.previousInstancesInfoDialog.visible ||
instanceStore.previousInstancesListDialog.visible; instanceStore.previousInstancesListDialog.visible;
if (!hadActiveDialog) { uiStore.openDialog({
uiStore.clearDialogCrumbs(); type: 'avatar',
} id: avatarId,
if (!options.skipBreadcrumb) { skipBreadcrumb: options.skipBreadcrumb,
uiStore.pushDialogCrumb('avatar', avatarId); hadActiveDialog
} });
instanceStore.hidePreviousInstancesDialogs(); instanceStore.hidePreviousInstancesDialogs();
userStore.userDialog.visible = false; userStore.userDialog.visible = false;
worldStore.worldDialog.visible = false; worldStore.worldDialog.visible = false;

View File

@@ -142,12 +142,12 @@ export const useGroupStore = defineStore('Group', () => {
avatarStore.avatarDialog.visible || avatarStore.avatarDialog.visible ||
instanceStore.previousInstancesInfoDialog.visible || instanceStore.previousInstancesInfoDialog.visible ||
instanceStore.previousInstancesListDialog.visible; instanceStore.previousInstancesListDialog.visible;
if (!hadActiveDialog) { uiStore.openDialog({
uiStore.clearDialogCrumbs(); type: 'group',
} id: groupId,
if (!options.skipBreadcrumb) { skipBreadcrumb: options.skipBreadcrumb,
uiStore.pushDialogCrumb('group', groupId); hadActiveDialog
} });
instanceStore.hidePreviousInstancesDialogs(); instanceStore.hidePreviousInstancesDialogs();
userStore.userDialog.visible = false; userStore.userDialog.visible = false;
worldStore.worldDialog.visible = false; worldStore.worldDialog.visible = false;

View File

@@ -290,15 +290,24 @@ export const useInstanceStore = defineStore('Instance', () => {
} }
function showPreviousInstancesInfoDialog(instanceId, options = {}) { 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(); hidePreviousInstancesDialogs();
previousInstancesInfoDialog.value.visible = true; previousInstancesInfoDialog.value.visible = true;
previousInstancesInfoDialog.value.instanceId = instanceId; previousInstancesInfoDialog.value.instanceId = instanceId;
if (!options.skipBreadcrumb && instanceId) { if (instanceId) {
uiStore.pushDialogCrumb( uiStore.openDialog({
'previous-instances-info', type: 'previous-instances-info',
instanceId, id: instanceId,
formatPreviousInstancesInfoLabel(instanceId) label: formatPreviousInstancesInfoLabel(instanceId),
); skipBreadcrumb: options.skipBreadcrumb,
hadActiveDialog
});
const location = parseLocation(instanceId); const location = parseLocation(instanceId);
if ( if (
location.worldId && location.worldId &&
@@ -326,6 +335,13 @@ export const useInstanceStore = defineStore('Instance', () => {
targetRef, targetRef,
options = {} options = {}
) { ) {
const hadActiveDialog =
userStore.userDialog.visible ||
worldStore.worldDialog.visible ||
groupStore.groupDialog.visible ||
previousInstancesInfoDialog.value.visible ||
previousInstancesListDialog.value.visible ||
uiStore.dialogCrumbs.length > 0;
hidePreviousInstancesDialogs(); hidePreviousInstancesDialogs();
previousInstancesListDialog.value.variant = variant; previousInstancesListDialog.value.variant = variant;
let resolved = null; let resolved = null;
@@ -342,16 +358,18 @@ export const useInstanceStore = defineStore('Instance', () => {
previousInstancesListDialog.value.visible = true; previousInstancesListDialog.value.visible = true;
previousInstancesListDialog.value.openFlg = true; previousInstancesListDialog.value.openFlg = true;
nextTick(() => (previousInstancesListDialog.value.openFlg = false)); nextTick(() => (previousInstancesListDialog.value.openFlg = false));
if (!options.skipBreadcrumb && resolved?.id) { if (resolved?.id) {
const label = const label =
variant === 'user' variant === 'user'
? resolved.displayName || resolved.id ? resolved.displayName || resolved.id
: resolved.name || resolved.id; : resolved.name || resolved.id;
uiStore.pushDialogCrumb( uiStore.openDialog({
`previous-instances-${variant}`, type: `previous-instances-${variant}`,
resolved.id, id: resolved.id,
label label,
); skipBreadcrumb: options.skipBreadcrumb,
hadActiveDialog
});
} }
} }

View File

@@ -107,6 +107,21 @@ export const useUiStore = defineStore('Ui', () => {
dialogCrumbs.value = []; 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. // 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. // This issue persists on prompts created with prompt(), unfortunately. Not sure how to fix that.
document.body.addEventListener('drop', function (e) { document.body.addEventListener('drop', function (e) {
@@ -191,6 +206,7 @@ export const useUiStore = defineStore('Ui', () => {
pushDialogCrumb, pushDialogCrumb,
setDialogCrumbLabel, setDialogCrumbLabel,
jumpDialogCrumb, jumpDialogCrumb,
clearDialogCrumbs clearDialogCrumbs,
openDialog
}; };
}); });

View File

@@ -774,12 +774,12 @@ export const useUserStore = defineStore('User', () => {
groupStore.groupDialog.visible || groupStore.groupDialog.visible ||
instanceStore.previousInstancesInfoDialog.visible || instanceStore.previousInstancesInfoDialog.visible ||
instanceStore.previousInstancesListDialog.visible; instanceStore.previousInstancesListDialog.visible;
if (!hadActiveDialog) { uiStore.openDialog({
uiStore.clearDialogCrumbs(); type: 'user',
} id: userId,
if (!options.skipBreadcrumb) { skipBreadcrumb: options.skipBreadcrumb,
uiStore.pushDialogCrumb('user', userId); hadActiveDialog
} });
instanceStore.hidePreviousInstancesDialogs(); instanceStore.hidePreviousInstancesDialogs();
worldStore.worldDialog.visible = false; worldStore.worldDialog.visible = false;
avatarStore.avatarDialog.visible = false; avatarStore.avatarDialog.visible = false;

View File

@@ -91,12 +91,12 @@ export const useWorldStore = defineStore('World', () => {
groupStore.groupDialog.visible || groupStore.groupDialog.visible ||
instanceStore.previousInstancesInfoDialog.visible || instanceStore.previousInstancesInfoDialog.visible ||
instanceStore.previousInstancesListDialog.visible; instanceStore.previousInstancesListDialog.visible;
if (!hadActiveDialog) { uiStore.openDialog({
uiStore.clearDialogCrumbs(); type: 'world',
} id: L.worldId,
if (!options.skipBreadcrumb) { skipBreadcrumb: options.skipBreadcrumb,
uiStore.pushDialogCrumb('world', L.worldId); hadActiveDialog
} });
D.visible = true; D.visible = true;
instanceStore.hidePreviousInstancesDialogs(); instanceStore.hidePreviousInstancesDialogs();
userStore.userDialog.visible = false; userStore.userDialog.visible = false;