Files
newfreeplanet_OLD/src/views/messages/messages.ts

277 lines
6.8 KiB
TypeScript
Executable File

import { defineComponent, ref, computed, watch } from 'vue'
import { useI18n } from '@src/boot/i18n'
import { useUserStore } from '@store/UserStore'
import { useGlobalStore } from '@store/globalStore'
import { useQuasar } from 'quasar'
import { tools } from '@store/Modules/tools'
import { IChat, IMessage, IMsgUsers, StatusMessage } from 'model'
import MixinUsers from '../../mixins/mixin-users'
import { CMyAvatar } from '../../components/CMyAvatar'
import { useRoute, useRouter } from 'vue-router'
import { useMessageStore } from '@store/MessageStore'
import { func_tools } from '@store/Modules/toolsext'
export default defineComponent({
name: 'Messages',
props: {
mystr: {
type: String,
required: true,
default: '',
},
myval: {
type: Number,
required: true,
default: 0,
},
mybool: {
type: Boolean,
required: true,
default: false,
},
},
components: { CMyAvatar },
setup(props, { emit }) {
const $q = useQuasar()
const { t } = useI18n()
const userStore = useUserStore()
const globalStore = useGlobalStore()
const messageStore = useMessageStore()
const $router = useRouter()
const route = useRoute()
const {
getUsernameChatByMsg, getNumMsg,
getImgByMsg, getMsgText, Username
} = MixinUsers()
const mydrawer = ref(true)
const miniState = ref(false)
const usernameloading = ref(<string | undefined>'')
const widthdrawer = ref(300)
const chatsel = ref(<IChat>{
username: '',
lasttimeActive: new Date()
})
const mytexttosend = ref('')
const loading = ref(false)
const lasts_messages = computed(() => messageStore.getlasts_messages)
// function users_msg_saved: IMsgUsers[] = []
function getLastUserChatted() {
const lastmsg: IMessage = messageStore.getlasts_messages().slice(-1)[0]
console.log('lastmsg', lastmsg)
if (lastmsg) {
return (lastmsg.origin !== Username()) ? lastmsg.origin : lastmsg.origin
} else {
return ''
}
}
function getlastdataread(username: string): any {
const myrec = msgchat(username)
// Get msg for this chat
const lastdata: any = (myrec) ? myrec.lastdataread : tools.getLastDateReadReset()
if (!lastdata)
return null
console.table(myrec)
let mydate = ''
if (!tools.isIsoDate(lastdata))
mydate = lastdata.toISOString()
else
return lastdata
// console.log('getlastdataread', mydate)
return mydate
}
function refreshdata(username: string) {
loading.value = true
chatsel.value.username = ''
return messageStore.updateMsgDataFromServer({
username,
lastdataread: getlastdataread(username)
}).then((ris) => {
usernameloading.value = username
chatsel.value.username = username
loading.value = false
const element = document.getElementById('last')
tools.scrollToElement(element)
// changemsgs('', '')
}).catch((err) => {
loading.value = false
})
}
const changeusername = watch(() => route.params.un, (newval, oldval) => {
if (route.params.un === undefined || route.params.un === ':un') {
usernameloading.value = getLastUserChatted()
} else {
let mystr2: any = route.params.un ? route.params.un : ''
usernameloading.value = mystr2
}
if (!miniState.value && tools.isMobile()) {
miniState.value = true
}
if (usernameloading.value) {
// Retrieve last msgs data from the server
refreshdata(usernameloading.value)
}
})
function styletextbar() {
let mystr = ''
if (mydrawer.value) {
if (!miniState.value)
mystr = `left: ${widthdrawer.value}px;`
else
mystr = 'left: 57px;'
} else {
mystr = 'left: 0;'
}
// console.log('tools.getwidth', tools.getwidth)
mystr += ` width: ${tools.getwidth($q) - widthdrawer.value - 40 - 300}px; `
return mystr
}
function showNotif(msgcode: any) {
tools.showNotif($q, (msgcode))
}
function drawerClick(e: any) {
// if in "mini" state and user
// click on drawer, we switch it to "normal" mode
if (miniState.value) {
miniState.value = false
// notice we have registered an event with capture flag;
// we need to stop further propagation as this click is
// intended for switching drawer to "normal" mode only
e.stopPropagation()
}
}
function getheight() {
// return height()
return $q.screen.height - 43 // .toolbar
}
function isMenuActive(username: string) {
return chatsel.value.username === username
}
function selChat(mymsg: IMessage) {
if (chatsel.value.username !== mymsg.dest)
$router.replace('/messages/' + mymsg.dest)
else {
// refresh
refreshdata(chatsel.value.username)
}
}
function msgchat(username: string): any {
// Get msg for this chat
if (messageStore.users_msg)
return messageStore.users_msg.find((rec: IMsgUsers) => rec.username === username)
// return users_msg_saved[username]
}
function msgchat_records(): IMessage[] {
const myrec = msgchat(chatsel.value.username)
// console.log('msgchat_records', myrec)
// Get msg for this chat
return (myrec) ? myrec.msgs : []
}
function sendMsg() {
const data: IMessage = {
origin: '',
dest: chatsel.value.username,
message: mytexttosend.value
}
data.dest = chatsel.value.username
data.message = mytexttosend.value
mytexttosend.value = ''
messageStore.SendMsgEvent(data).then((ris) => {
data.status = StatusMessage.Sending
const element = document.getElementById('last')
tools.scrollToElement(element)
if (!ris)
tools.showNegativeNotif($q, t('cal.sendmsg_error'))
// tools.showPositiveNotif(self.$q, self.('cal.sendmsg_sent'))
// else
})
}
function loadMorePosts() {
// ....
}
// @ts-ignore
function myonScroll({ target: { scrollTop, clientHeight, scrollHeight } }: {scrollTop: number, clientHeight: number, scrollHeight: number}) {
if (scrollTop + clientHeight >= scrollHeight) {
loadMorePosts()
}
}
function created() {
changeusername()
}
created()
return {
msgchat_records,
msgchat,
sendMsg,
selChat,
isMenuActive,
getheight,
drawerClick,
showNotif,
styletextbar,
lasts_messages,
myonScroll,
widthdrawer,
chatsel,
mytexttosend,
loading,
mydrawer,
getUsernameChatByMsg,
getNumMsg,
getImgByMsg,
getMsgText,
Username,
func_tools,
tools,
}
}
})