Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
39 lines
1.0 KiB
Vue
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>
|