56 lines
1.3 KiB
JavaScript
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
|