From 60b49c71e155cca73e121a7723794e3eb898ebdf Mon Sep 17 00:00:00 2001 From: pa Date: Wed, 21 Jan 2026 23:07:17 +0900 Subject: [PATCH] change previous instance dialog navigation to use main dialog container --- .../dialogs/GroupDialog/GroupDialog.vue | 19 +- .../dialogs/MainDialogContainer.vue | 69 +++++- .../PreviousInstancesGroupDialog.vue | 87 +++---- .../PreviousInstancesInfoDialog.vue | 64 ++--- .../PreviousInstancesWorldDialog.vue | 94 ++++--- .../PreviousInstancesUserDialog.vue | 107 ++++---- .../dialogs/UserDialog/UserDialog.vue | 17 +- .../dialogs/WorldDialog/WorldDialog.vue | 21 +- src/stores/instance.js | 233 +++++++++++++++++- src/views/Layout/MainLayout.vue | 3 - 10 files changed, 462 insertions(+), 252 deletions(-) diff --git a/src/components/dialogs/GroupDialog/GroupDialog.vue b/src/components/dialogs/GroupDialog/GroupDialog.vue index 0161d393..b70854e3 100644 --- a/src/components/dialogs/GroupDialog/GroupDialog.vue +++ b/src/components/dialogs/GroupDialog/GroupDialog.vue @@ -1109,7 +1109,6 @@ - @@ -1137,7 +1136,7 @@ XCircle } from 'lucide-vue-next'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; - import { computed, nextTick, reactive, ref, watch } from 'vue'; + import { computed, reactive, ref, watch } from 'vue'; import { DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Card } from '@/components/ui/card'; @@ -1171,6 +1170,7 @@ useAppearanceSettingsStore, useGalleryStore, useGroupStore, + useInstanceStore, useLocationStore, useModalStore, useUserStore @@ -1190,8 +1190,6 @@ import GroupCalendarEventCard from '../../../views/Tools/components/GroupCalendarEventCard.vue'; import GroupPostEditDialog from './GroupPostEditDialog.vue'; import InstanceActionBar from '../../InstanceActionBar.vue'; - import PreviousInstancesGroupDialog from '../PreviousInstancesDialog/PreviousInstancesGroupDialog.vue'; - import * as workerTimers from 'worker-timers'; const { t } = useI18n(); @@ -1210,6 +1208,7 @@ ); const modalStore = useModalStore(); + const instanceStore = useInstanceStore(); const { showUserDialog } = useUserStore(); const { currentUser } = storeToRefs(useUserStore()); @@ -1326,12 +1325,6 @@ groupId: '' }); - const previousInstancesGroupDialog = ref({ - visible: false, - openFlg: false, - groupRef: {} - }); - let loadMoreGroupMembersParams = ref({ n: 100, offset: 0, @@ -1382,11 +1375,7 @@ } function showPreviousInstancesGroupDialog(groupRef) { - const D = previousInstancesGroupDialog.value; - D.groupRef = groupRef; - D.visible = true; - D.openFlg = true; - nextTick(() => (D.openFlg = false)); + instanceStore.showPreviousInstancesGroupDialog(groupRef); } function setGroupRepresentation(groupId) { diff --git a/src/components/dialogs/MainDialogContainer.vue b/src/components/dialogs/MainDialogContainer.vue index 01fd2ec6..b5f844a5 100644 --- a/src/components/dialogs/MainDialogContainer.vue +++ b/src/components/dialogs/MainDialogContainer.vue @@ -8,7 +8,7 @@ BreadcrumbPage, BreadcrumbSeparator } from '@/components/ui/breadcrumb'; - import { useAvatarStore, useGroupStore, useUiStore, useUserStore, useWorldStore } from '@/stores'; + import { useAvatarStore, useGroupStore, useInstanceStore, useUiStore, useUserStore, useWorldStore } from '@/stores'; import { DropdownMenu, DropdownMenuContent, @@ -17,30 +17,48 @@ } from '@/components/ui/dropdown-menu'; import { Dialog, DialogContent } from '@/components/ui/dialog'; import { computed } from 'vue'; + import { storeToRefs } from 'pinia'; import AvatarDialog from './AvatarDialog/AvatarDialog.vue'; import GroupDialog from './GroupDialog/GroupDialog.vue'; import UserDialog from './UserDialog/UserDialog.vue'; import WorldDialog from './WorldDialog/WorldDialog.vue'; + import PreviousInstancesGroupDialog from './PreviousInstancesDialog/PreviousInstancesGroupDialog.vue'; + import PreviousInstancesInfoDialog from './PreviousInstancesDialog/PreviousInstancesInfoDialog.vue'; + import PreviousInstancesUserDialog from './UserDialog/PreviousInstancesUserDialog.vue'; + import PreviousInstancesWorldDialog from './PreviousInstancesDialog/PreviousInstancesWorldDialog.vue'; const avatarStore = useAvatarStore(); const groupStore = useGroupStore(); + const instanceStore = useInstanceStore(); const uiStore = useUiStore(); const userStore = useUserStore(); const worldStore = useWorldStore(); + const { + previousInstancesInfoDialogVisible, + previousInstancesUserDialog, + previousInstancesWorldDialog, + previousInstancesGroupDialog + } = storeToRefs(instanceStore); + const isOpen = computed({ get: () => userStore.userDialog.visible || worldStore.worldDialog.visible || avatarStore.avatarDialog.visible || - groupStore.groupDialog.visible, + groupStore.groupDialog.visible || + previousInstancesInfoDialogVisible.value || + previousInstancesUserDialog.value.visible || + previousInstancesWorldDialog.value.visible || + previousInstancesGroupDialog.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(); } } @@ -64,6 +82,18 @@ if (groupStore.groupDialog.visible) { return 'group'; } + if (previousInstancesInfoDialogVisible.value) { + return 'previous-instances-info'; + } + if (previousInstancesUserDialog.value.visible) { + return 'previous-instances-user'; + } + if (previousInstancesWorldDialog.value.visible) { + return 'previous-instances-world'; + } + if (previousInstancesGroupDialog.value.visible) { + return 'previous-instances-group'; + } return null; }); const activeComponent = computed(() => { @@ -76,6 +106,14 @@ return AvatarDialog; case 'group': return GroupDialog; + case 'previous-instances-info': + return PreviousInstancesInfoDialog; + case 'previous-instances-user': + return PreviousInstancesUserDialog; + case 'previous-instances-world': + return PreviousInstancesWorldDialog; + case 'previous-instances-group': + return PreviousInstancesGroupDialog; default: return null; } @@ -88,6 +126,11 @@ return 'x-dialog x-avatar-dialog sm:max-w-235 translate-y-0'; case 'group': return 'x-dialog x-group-dialog group-body translate-y-0 sm:max-w-235'; + case 'previous-instances-info': + case 'previous-instances-user': + case 'previous-instances-world': + case 'previous-instances-group': + return 'x-dialog translate-y-0 sm:max-w-250'; case 'user': default: return 'x-dialog x-user-dialog sm:max-w-235 translate-y-0'; @@ -95,7 +138,7 @@ }); const shouldShowBreadcrumbs = computed(() => dialogCrumbs.value.length > 1); - const shouldCollapseBreadcrumbs = computed(() => dialogCrumbs.value.length > 4); + const shouldCollapseBreadcrumbs = computed(() => dialogCrumbs.value.length > 5); const middleBreadcrumbs = computed(() => { if (!shouldCollapseBreadcrumbs.value) { return []; @@ -110,19 +153,39 @@ } 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; + } + if (item.type === 'previous-instances-user') { + instanceStore.showPreviousInstancesUserDialog(item.id, { skipBreadcrumb: true }); + return; + } + if (item.type === 'previous-instances-world') { + instanceStore.showPreviousInstancesWorldDialog(item.id, { skipBreadcrumb: true }); + return; + } + if (item.type === 'previous-instances-group') { + instanceStore.showPreviousInstancesGroupDialog(item.id, { skipBreadcrumb: true }); + return; + } + if (item.type === 'previous-instances-info') { + instanceStore.showPreviousInstancesInfoDialog(item.id, { skipBreadcrumb: true }); } }; diff --git a/src/components/dialogs/PreviousInstancesDialog/PreviousInstancesGroupDialog.vue b/src/components/dialogs/PreviousInstancesDialog/PreviousInstancesGroupDialog.vue index 8a5c2eba..e4579a16 100644 --- a/src/components/dialogs/PreviousInstancesDialog/PreviousInstancesGroupDialog.vue +++ b/src/components/dialogs/PreviousInstancesDialog/PreviousInstancesGroupDialog.vue @@ -1,35 +1,33 @@ diff --git a/src/components/dialogs/PreviousInstancesDialog/PreviousInstancesWorldDialog.vue b/src/components/dialogs/PreviousInstancesDialog/PreviousInstancesWorldDialog.vue index 62b0c247..c6e87e9e 100644 --- a/src/components/dialogs/PreviousInstancesDialog/PreviousInstancesWorldDialog.vue +++ b/src/components/dialogs/PreviousInstancesDialog/PreviousInstancesWorldDialog.vue @@ -1,36 +1,34 @@