Files
myprojplanet_vite/src/store/NotifStore.ts
2024-09-18 14:56:25 +02:00

324 lines
9.3 KiB
TypeScript
Executable File

import { defineStore } from 'pinia'
import { Api } from '@api'
import { serv_constants } from './Modules/serv_constants'
import { INotif, INotifState } from '../model'
import { tools } from '@src/store/Modules/tools'
import { NotifDefault } from '@src/model'
import { shared_consts } from '@src/common/shared_vuejs'
import { useUserStore } from '@store/UserStore'
export const useNotifStore = defineStore('NotifStore', {
state: (): INotifState => ({
last_notifs: [],
last_notifcoins: [],
show_all: true,
updateNotification: false,
countNotif: 0,
}),
getters: {
getlasts_notifs: (mystate: INotifState) => (): INotif[] => {
const ctrec = (mystate.last_notifs) ? mystate.last_notifs.slice(0, 20).filter((rec) => (mystate.show_all ? true : !rec.read) && (rec.typedir !== shared_consts.TypeNotifs.TYPEDIR_CIRCUITS)) : []
return (ctrec)
},
getlasts_coins: (mystate: INotifState) => (): INotif[] => {
const ctrec = (mystate.last_notifcoins) ? mystate.last_notifcoins.filter((rec) => (mystate.show_all ? true : !rec.read) && (rec.typedir === shared_consts.TypeNotifs.TYPEDIR_CIRCUITS)) : []
return (ctrec)
},
getnotifs_coinsreq: (mystate: INotifState) => (): INotif[] => {
const ctrec = (mystate.last_notifcoins) ? mystate.last_notifcoins.filter((rec) => rec.typedir === shared_consts.TypeNotifs.TYPEDIR_CIRCUITS && rec.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_SENDCOINSREQ && rec.status === shared_consts.CircuitsNotif.STATUS_NONE) : []
return (ctrec)
},
getnumNotifUnread: (mystate: INotifState) => () => {
const myarr = mystate.last_notifs.filter((notif) => !notif.read && (notif.typedir !== shared_consts.TypeNotifs.TYPEDIR_CIRCUITS))
return (tools.isArray(myarr) ? myarr.length : 0)
},
getnumCoinsUnread: (mystate: INotifState) => () => {
const myarr = mystate.last_notifcoins.filter((notif) => !notif.read && (notif.typedir === shared_consts.TypeNotifs.TYPEDIR_CIRCUITS))
return (tools.isArray(myarr) ? myarr.length : 0)
},
},
actions: {
updateArrNotif() {
this.setBadgeIconApp()
},
setNotif(notif: INotif) {
console.log('setNotif', notif)
if (notif) {
this.last_notifs = [notif, ...this.last_notifs]
}
this.updateArrNotif()
},
setAsRead(idnotif: string) {
const rec = this.last_notifs.find((rec: any) => rec._id === idnotif)
if (rec) {
rec.read = true
}
this.updateArrNotif()
},
updateRecNotif(recnotif: INotif) {
if (recnotif) {
const myrec = this.last_notifs.find((rec: any) => rec._id === recnotif._id)
if (myrec) {
myrec.status = recnotif.status
myrec.read = recnotif.read
myrec.descr = recnotif.descr
this.updateArrNotif()
}
}
},
updateRecNotifCoins(recnotif: INotif) {
if (recnotif) {
const myrec = this.last_notifcoins.find((rec: any) => rec._id === recnotif._id)
if (myrec) {
myrec.status = recnotif.status
myrec.read = recnotif.read
myrec.descr = recnotif.descr
this.updateArrNotif()
}
}
},
updateArrRecNotifFromServer(arrrecnotif: INotif[]) {
// console.log('arrrecnotif', arrrecnotif)
if (arrrecnotif && arrrecnotif.length > 0) {
this.last_notifs = arrrecnotif
this.updateArrNotif()
}
},
updateArrRecNotifCoinsFromServer(arrrecnotifcoins: INotif[]) {
// console.log('arrrecnotif', arrrecnotif)
if (arrrecnotifcoins && arrrecnotifcoins.length > 0) {
this.last_notifcoins = arrrecnotifcoins
this.updateArrNotif()
}
},
async setBadgeIconApp() {
// Get our dummy count and update it,
// just to give more context for this demo.
const countNow = this.getnumNotifUnread()
try {
// @ts-ignore
await navigator.setAppBadge(countNow)
.catch((error: any) => { /* ... */
});
} catch (e) {
}
},
setAllRead(username: string, qualinotif: number) {
return Api.SendReq(`/sendnotif/setall/${username}/${qualinotif}/${process.env.APP_ID}`, 'GET', null)
.then((res) => {
// console.log('res', res)
setTimeout(() => {
if (res) {
if (qualinotif === shared_consts.QualiNotifs.CIRCUITS) {
for (const rec of this.last_notifcoins) {
rec.read = true
}
} else {
for (const rec of this.last_notifs) {
rec.read = true
}
}
}
this.updateArrNotif()
}, 10000)
})
.catch((error) => {
console.error(error)
return false
})
},
setRead(_id: string, notifcoins: boolean) {
return Api.SendReq(`/sendnotif/set/${_id}/${process.env.APP_ID}`, 'GET', null)
.then((res) => {
// console.log('res', res)
if (res) {
let rec = null
if (!notifcoins)
rec = this.last_notifs.find((rec: any) => rec._id === _id)
else
rec = this.last_notifcoins.find((rec: any) => rec._id === _id)
if (rec) {
rec.read = true
}
}
this.updateArrNotif()
})
.catch((error) => {
console.error(error)
return false
})
},
deleteRec(username: string, id: string, notifcoins: boolean) {
return Api.SendReq(`/sendnotif/del/${username}/${id}/${process.env.APP_ID}`, 'GET', null)
.then((res) => {
// console.log('res', res)
if (res) {
if (!notifcoins)
this.last_notifs = this.last_notifs.filter((rec) => rec._id !== id)
else
this.last_notifcoins = this.last_notifcoins.filter((rec) => rec._id !== id)
}
this.updateArrNotif()
})
.catch((error) => {
console.error(error)
return false
})
},
deleteAll(username: string, qualinotif: number) {
return Api.SendReq(`/sendnotif/delall/${username}/${qualinotif}/${process.env.APP_ID}`, 'GET', null)
.then((res) => {
// console.log('res', res)
if (res) {
if (qualinotif === shared_consts.QualiNotifs.CIRCUITS)
this.last_notifcoins = []
else if (qualinotif === shared_consts.QualiNotifs.OTHERS)
this.last_notifs = []
this.updateArrNotif()
}
})
.catch((error) => {
console.error(error)
return false
})
},
deactivateRec(id: string) {
return ''
},
async updateNotifDataFromServer({ username, lastdataread }: { username: string, lastdataread: Date }) {
console.log('updateNotifDataFromServer', username, lastdataread)
return Api.SendReq(`/sendnotif/${username}/${lastdataread}/${process.env.APP_ID}`, 'GET', null)
.then((res) => {
// console.log('res', res)
if (!!res.data) {
if (!!res.data.arrnotif)
this.last_notifs = res.data.arrnotif
else
this.last_notifs = []
if (!!res.data.arrnotifcoins)
this.last_notifcoins = res.data.arrnotifcoins
else
this.last_notifcoins = []
}
this.updateArrNotif()
tools.updateMyData(res.data.ris)
return true
})
.catch((error) => {
console.error(error)
return false
})
},
async SendNotifEvent(notif: INotif) {
console.log('SendNotifEvent', notif)
const userStore = useUserStore()
const data: INotif = { ...NotifDefault, ...notif }
data.idapp = process.env.APP_ID
data.typedir = notif.typedir
data.typeid = notif.typeid
data.sender = notif.sender
data.dest = notif.dest
data.title = notif.title
data.descr = notif.descr
data.datenotif = tools.getDateNow()
data.read = false
// console.log('DOPO:')
// console.table(data)
return Api.SendReq('/sendnotif', 'POST', data)
.then((res) => {
// console.log('res', res)
if (res.status === 200) {
if (res.data.code === serv_constants.RIS_CODE_OK && res.data.record) {
if (res.data.record.dest === userStore.my.username) {
this.setNotif(res.data.record)
}
return true
}
}
return false
})
.catch((error) => {
console.error(error)
return false
})
},
setCountNotifs(num: number) {
this.countNotif = num
},
getLastNotif(username: string): any {
// Get msg for this chat
if (this.last_notifs)
return this.last_notifs.find((rec: INotif) => rec.dest === username)
// return users_msg_saved[username]
},
getLastDataRead(username: string): any {
// Get msg for this
let myrec = this.getLastNotif(username)
const lastdata: any = (myrec && myrec.lastdataread) ? myrec.lastdataread : tools.getLastDateReadReset()
let mydate = ''
if (!tools.isIsoDate(lastdata))
mydate = lastdata.toISOString()
else
return lastdata
return mydate
}
},
})