281 lines
8.1 KiB
TypeScript
Executable File
281 lines
8.1 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: [],
|
|
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_notifs) ? mystate.last_notifs.slice(0, 20).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_notifs) ? mystate.last_notifs.slice(0, 20).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_notifs.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()
|
|
}
|
|
}
|
|
},
|
|
updateArrRecNotifFromServer(arrrecnotif: INotif[]) {
|
|
if (arrrecnotif && arrrecnotif.length > 0) {
|
|
this.last_notifs = arrrecnotif
|
|
|
|
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) {
|
|
for (const rec of this.last_notifs) {
|
|
rec.read = true
|
|
}
|
|
}
|
|
this.updateArrNotif()
|
|
}, 10000)
|
|
|
|
})
|
|
.catch((error) => {
|
|
console.error(error)
|
|
return false
|
|
})
|
|
},
|
|
|
|
setRead(_id: string) {
|
|
return Api.SendReq(`/sendnotif/set/${_id}/${process.env.APP_ID}`, 'GET', null)
|
|
.then((res) => {
|
|
// console.log('res', res)
|
|
if (res) {
|
|
const rec = this.last_notifs.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) {
|
|
return Api.SendReq(`/sendnotif/del/${username}/${id}/${process.env.APP_ID}`, 'GET', null)
|
|
.then((res) => {
|
|
// console.log('res', res)
|
|
if (res) {
|
|
this.last_notifs = this.last_notifs.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_notifs = this.last_notifs.filter((rec: INotif) => rec.typedir !== shared_consts.TypeNotifs.TYPEDIR_CIRCUITS)
|
|
else if (qualinotif === shared_consts.QualiNotifs.OTHERS)
|
|
this.last_notifs = this.last_notifs.filter((rec: INotif) => rec.typedir === shared_consts.TypeNotifs.TYPEDIR_CIRCUITS)
|
|
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 && !!res.data.arrnotif) {
|
|
this.last_notifs = res.data.arrnotif
|
|
} else {
|
|
this.last_notifs = []
|
|
}
|
|
this.updateArrNotif()
|
|
tools.updateMyData(res.data)
|
|
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
|
|
}
|
|
|
|
|
|
},
|
|
|
|
})
|