Files
BRETT/app/components/DmFloatingContainer.vue
T
FliesentischKingandDevin 22639fe770 Add draggable and resizable floating direct message chat windows
Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-10-19 22:25:41 +02:00

39 lines
1.0 KiB
Vue

<script setup lang="ts">
const route = useRoute()
const { user } = useAuth()
const dms = useDirectMessages()
// Auf der dedizierten /messages-Seite keine schwebenden Fenster doppelt zeigen
const visible = computed(() =>
!!user.value
&& !route.path.startsWith('/messages')
&& dms.floatingChats.value.length > 0,
)
// Z-Index-Reihenfolge: zuletzt angeklicktes Fenster liegt ganz vorne
const zOrder = ref<number[]>([])
function bringToFront(userId: number) {
zOrder.value = [...zOrder.value.filter(id => id !== userId), userId]
}
function zIndexFor(userId: number, idx: number) {
const pos = zOrder.value.indexOf(userId)
return 40 + (pos >= 0 ? pos + 10 : idx)
}
</script>
<template>
<div
v-if="visible"
class="pointer-events-none fixed inset-0 z-40"
>
<DmFloatingWindow
v-for="(tab, idx) in dms.floatingChats.value"
:key="tab.user.id"
:tab="tab"
:index="idx"
:z-index="zIndexFor(tab.user.id, idx)"
@focus="bringToFront(tab.user.id)"
/>
</div>
</template>