pleroma-fe/src/components/shout_panel/shout_panel.js
2026-01-08 17:42:20 +02:00

56 lines
1.3 KiB
JavaScript

import generateProfileLink from 'src/services/user_profile_link_generator/user_profile_link_generator'
import { useShoutStore } from 'src/stores/shout'
import { library } from '@fortawesome/fontawesome-svg-core'
import { faBullhorn, faTimes } from '@fortawesome/free-solid-svg-icons'
library.add(faBullhorn, faTimes)
const shoutPanel = {
props: ['floating'],
data() {
return {
currentMessage: '',
channel: null,
collapsed: true,
}
},
computed: {
messages() {
return useShoutStore().messages
},
},
methods: {
submit(message) {
useShoutStore().channel.push('new_msg', { text: message }, 10000)
this.currentMessage = ''
},
togglePanel() {
this.collapsed = !this.collapsed
},
userProfileLink(user) {
return generateProfileLink(
user.id,
user.username,
this.$store.state.instance.restrictedNicknames,
)
},
},
watch: {
messages() {
const scrollEl = this.$el.querySelector('.chat-window')
if (!scrollEl) return
if (
scrollEl.scrollTop + scrollEl.offsetHeight + 20 >
scrollEl.scrollHeight
) {
this.$nextTick(() => {
if (!scrollEl) return
scrollEl.scrollTop = scrollEl.scrollHeight - scrollEl.offsetHeight
})
}
},
},
}
export default shoutPanel