First Committ

This commit is contained in:
Paolo Arena
2021-08-31 18:09:59 +02:00
commit 1d6c55807c
299 changed files with 55382 additions and 0 deletions

681
src/store/globalStore.ts Normal file
View File

@@ -0,0 +1,681 @@
import { defineStore } from 'pinia'
import {
ICfgServer, IColGridTable, IConfig, IDataPass, IGlobalState, IListRoutes, ISettings, StateConnection,
} from '@model'
import { static_data } from '@src/db/static_data'
import * as Types from '@src/store/Api/ApiTypes'
import { useUserStore } from '@store/UserStore'
import { serv_constants } from '@store/Modules/serv_constants'
import * as ApiTables from '@src/store/Modules/ApiTables'
import globalroutines from '@src/boot/globalroutines'
import { useRouter } from 'vue-router'
import { cfgrouter } from '@src/router/route-config'
import Api from './Api'
import { toolsext } from '@store/Modules/toolsext'
import { costanti } from '@costanti'
import { fieldsTable } from '@store/Modules/fieldsTable'
import { tools } from '@store/Modules/tools'
import { shared_consts } from '@src/common/shared_vuejs'
const stateConnDefault = 'online'
export const useGlobalStore = defineStore('GlobalStore', {
// @ts-ignore
state: (): IGlobalState => ({
finishLoading: false,
conta: 0,
wasAlreadySubscribed: false,
wasAlreadySubOnDb: false,
isLoginPage: false,
layoutNeeded: true,
mobileMode: false,
menuCollapse: true,
leftDrawerOpen: true,
rightDrawerOpen: false,
rightCartOpen: false,
stateConnection: stateConnDefault,
networkDataReceived: false,
clickcmd: '',
cfgServer: [],
testp1: { contatore: 0, mioarray: [] },
category: 'personal',
posts: [],
menulinks: {},
listatodo: [
{ nametranslate: 'personal', description: 'personal' },
{ nametranslate: 'work', description: 'work' },
{ nametranslate: 'shopping', description: 'shopping' },
],
connData: {
uploading_server: 0,
uploading_indexeddb: 0,
downloading_server: 0,
downloading_indexeddb: 0,
},
arrConfig: [],
lastaction: {
table: '',
type: 0,
_id: 0,
},
serv_settings: [],
templemail: [],
opzemail: [],
settings: [],
disciplines: [],
paymenttypes: [],
autoplaydisc: 8000,
newstosent: [],
gallery: [],
mailinglist: [],
mypage: [],
calzoom: [],
producers: [],
groups: [],
resps: [],
workers: [],
storehouses: [],
departments: [],
sharewithus: [],
TIMER: null,
TIMEOUT: null,
CUT: null,
TIMER_STATE: 0,
URL_RITORNA: '',
URL_RESTORE: '',
}),
getters: {
isNewVersionAvailable(state: IGlobalState) {
// console.log('cfgServer', cfgServer)
const serversrec = state.cfgServer.find((x) => (x.chiave === toolsext.SERVKEY_VERS) && (x.idapp === process.env.APP_ID))
// console.log('Record ', serversrec)
if (serversrec) {
console.log('Vers Server ', serversrec.valore, 'Vers locale:', process.env.APP_VERSION)
return serversrec.valore !== process.env.APP_VERSION
}
return false
},
isMyLang: (state: IGlobalState) => (rec: any) => {
if (!rec.lang) return true
return (rec.lang === toolsext.getLocale(false) || toolsext.getLocale() === '')
},
getPage: (state: IGlobalState) => (path: string) => state.mypage.find((page) => (`/${page.path}`) === path),
getmenu: (state: IGlobalState): any => {
// console.log('getmenu', cfgrouter.getmenu())
/*
const mystate = state
mystate.menulinks = {
Dashboard: {
routes: cfgrouter.getmenu(),
show: true,
},
}
*/
// return mystate.menulinks
cfgrouter.getmenu()
},
getListByTable: (state: IGlobalState) => (table: string): any => {
/* if (table === costanti.TABEVENTS)
return CalendarStore.eventlist
else if (table === 'operators')
return CalendarStore.operators
else if (table === 'internalpages')
return CalendarStore.internalpages
else if (table === 'wheres')
return CalendarStore.wheres
else if (table === 'contribtype')
return CalendarStore.contribtype */
let ris = null
if (table === 'disciplines') ris = state.disciplines
else if (table === toolsext.TABNEWSLETTER) ris = state.newstosent
else if (table === toolsext.TABGALLERY) ris = state.gallery
else if (table === toolsext.TABTEMPLEMAIL) ris = state.templemail
else if (table === toolsext.TABOPZEMAIL) ris = state.opzemail
else if (table === toolsext.TABMAILINGLIST) ris = state.mailinglist
else if (table === toolsext.TABMYPAGE) ris = state.mypage
else if (table === toolsext.TABCALZOOM) ris = state.calzoom
else if (table === 'producers') ris = state.producers
else if (table === 'storehouses') ris = state.storehouses
else if (table === 'groups') ris = state.groups
else if (table === 'resps') ris = state.resps
else if (table === 'workers') ris = state.workers
else if (table === 'departments') ris = state.departments
else if (table === 'sharewithus') ris = state.sharewithus
else if (table === 'paymenttypes') ris = state.paymenttypes
/* else if (table === 'bookings')
return CalendarStore.bookedevent
else if (table === 'users')
return userStore.usersList
else if (table === 'sendmsgs')
return MessageStore.last_msgs
else if (table === 'settings')
return userStore.settings */
else return ris
return ris || null
},
getrecSettingsByKey: (state: IGlobalState) => (key: any, serv: any): ISettings | undefined => {
if (serv) return state.serv_settings.find((rec) => rec.key === key)
return state.settings.find((rec) => rec.key === key)
},
getCmdClick: (state: IGlobalState): string => (state.clickcmd ? state.clickcmd : ''),
getValueSettingsByKey: (state: IGlobalState) => (key: any, serv: any): any | undefined => {
// @ts-ignore
const myrec = getrecSettingsByKey(key, serv)
if (myrec) {
if ((myrec.type === costanti.FieldType.date) || (myrec.type === costanti.FieldType.onlydate)) return myrec.value_date
if ((myrec.type === costanti.FieldType.number) || (myrec.type === costanti.FieldType.hours)) return myrec.value_num
if (myrec.type === costanti.FieldType.boolean) return myrec.value_bool
return myrec.value_str
}
return ''
},
// @ts-ignore
setValueSettingsByKey: (state: IGlobalState) => ({ key, value, serv }): any => {
// Update the Server
// Update in Memory
let myrec = null
if (serv) myrec = state.serv_settings.find((rec: any) => rec.key === key)
else myrec = state.settings.find((rec: any) => rec.key === key)
if (myrec) {
if ((myrec.type === costanti.FieldType.date) || (myrec.type === costanti.FieldType.onlydate)) myrec.value_date = value
else if ((myrec.type === costanti.FieldType.number) || (myrec.type === costanti.FieldType.hours)) myrec.value_num = value
else if (myrec.type === costanti.FieldType.boolean) myrec.value_bool = value
else myrec.value_str = value
console.log('setValueSettingsByKey value', value, 'myrec', myrec)
}
},
},
actions: {
changeCmdClick(value: string) {
console.log('changeCmdClick', value)
this.clickcmd = value
},
isOnline(): boolean {
return this.stateConnection === 'online'
},
async addDynamicPages() {
const arrpagesroute: IListRoutes[] = []
for (const page of this.mypage) {
if (page.active) {
// console.log('page', page.lang)
if (this.isMyLang(page)) {
// console.log('page', page.lang, 'OK')
arrpagesroute.push({
active: true,
order: page.order ? page.order : 1000,
lang: page.lang,
path: `/${page.path}`,
name: '',
text: page.title,
materialIcon: page.icon,
component: () => import('@src/root/mypage/mypage.vue'),
inmenu: page.inmenu,
onlySocioResidente: page.only_residenti,
onlyConsiglio: page.only_consiglio,
color: page.color,
infooter: page.infooter,
onlyif_logged: page.onlyif_logged,
level_child: page.l_child,
level_parent: page.l_par,
submenu: page.submenu,
})
}
}
}
const last = {
active: true,
order: 10000,
path: '*',
materialIcon: 'fas fa-calendar-plus',
name: 'otherpages.error404def',
component: () => import('@src/root/My404page/My404page.vue'),
inmenu: false,
infooter: false,
}
const sito_offline = {
active: true,
order: 20,
path: '/sito_offline',
materialIcon: 'home',
name: 'otherpages.sito_offline',
component: () => import('@src/rootgen/sito_offline/sito_offline.vue'),
inmenu: true,
infooter: true,
}
if (!toolsext.sito_online(false)) {
static_data.routes = [sito_offline, last]
} else {
static_data.routes = [...static_data.baseroutes, ...arrpagesroute, last]
}
// Sort array
static_data.routes = static_data.routes.sort((a, myb) => a.order - myb.order)
/*
if (tools.sito_online(false)) {
router.addRoutes([...arrpagesroute, last])
} else {
router.addRoutes([sito_offline, last])
router.replace('/sito_offline')
}
*/
},
async loadPage(path: string) {
const userStore = useUserStore()
path = path.substring(1)
const mypage = this.getPage(`/${path}`)
// Controlla se l'ho già caricato
if (!!mypage && !!mypage.content) {
return mypage
}
console.log('loadPage', path)
return Api.SendReq('/getpage', 'POST', { path })
.then((res) => {
// console.table(res)
if (res) {
const index = this.mypage.findIndex((rec) => rec.path === path)
if (index >= 0) {
this.mypage[index] = res.data.mypage
}
return res.data.mypage
}
return null
})
.catch((error) => {
console.log('error loadTable', error)
userStore.setErrorCatch(error)
return null
})
},
async saveTable(mydata: object) {
// console.log('saveTable', mydata)
const userStore = useUserStore()
return Api.SendReq('/settable', 'POST', mydata)
.then((res) => res.data)
.catch((error) => {
console.log('error saveTable', error)
userStore.setErrorCatch(error)
return null
})
},
async saveFieldValue(mydata: IDataPass) {
// const userStore = useUserStore()
return Api.SendReq('/chval', 'PATCH', { data: mydata })
.then((res) => {
if (res) {
this.UpdateValuesInMemory(mydata)
return (res.data.code === serv_constants.RIS_CODE_OK)
}
return false
})
.catch((error) => false)
},
setPaoArray_Delete(state: IGlobalState) {
state.testp1.mioarray.pop()
},
setConta(num: number) {
this.conta = num
},
setleftDrawerOpen(bool: boolean) {
this.leftDrawerOpen = bool
localStorage.setItem(toolsext.localStorage.leftDrawerOpen, bool.toString())
},
setCategorySel(cat: string | null) {
this.category = cat || ''
},
setStateConnection(stateconn: StateConnection) {
if (this.stateConnection !== stateconn) {
console.log('INTERNET ', stateconn)
this.stateConnection = stateconn
}
},
saveConfig(data: IConfig) {
let dataout
// this.$set(dataout, data.value, {'value': 'default value'})
// @ts-ignore
return globalroutines(null, 'write', 'config', { _id: data._id, value: data.value })
},
UpdateValuesInMemory(mydata: IDataPass): void {
const { id } = mydata
const { table } = mydata
try {
const mylist = this.getListByTable(table)
const mykey = fieldsTable.getKeyByTable(table)
if (mylist) {
const myrec = mylist.find((event: any) => event[mykey] === id)
// console.log('myrec', myrec)
if (myrec) {
// console.log('key', value, myrec[key])
for (const [key, value] of Object.entries(mydata.fieldsvalue)) {
myrec[key] = value
}
}
}
} catch (e) {
console.error(e)
}
},
async deleteSubscriptionToServer() {
console.log('DeleteSubscriptionToServer: ')
return Api.SendReq('/subscribe/del', 'DELETE', null)
.then((res) => {
})
},
async clearDataAfterLogout() {
console.log('clearDataAfterLogout')
// Clear all data from the IndexedDB
// for (const table of ApiTables.allTables()) {
// ++Todo conv: await globalroutines(null, 'clearalldata', table, null)
// }
if (static_data.functionality.PWA) {
if ('serviceWorker' in navigator) {
// REMOVE ALL SUBSCRIPTION
console.log('REMOVE ALL SUBSCRIPTION...')
await navigator.serviceWorker.ready.then((reg) => {
console.log('... Ready')
reg.pushManager.getSubscription().then((subscription) => {
console.log(' Found Subscription...')
if (subscription) {
subscription.unsubscribe().then((successful) => {
// You've successfully unsubscribed
console.log('You\'ve successfully unsubscribed')
}).catch((e) => {
// Unsubscription failed
})
}
})
})
}
}
await this.deleteSubscriptionToServer()
},
async clearDataAfterLoginOnlyIfActiveConnection() {
const prova = 1
return prova
},
async loadAfterLogin() {
// console.log('loadAfterLogin')
this.clearDataAfterLoginOnlyIfActiveConnection()
let isok = false
const $router = useRouter()
if (!await this.loadSite()) {
$router.push('/signin')
} else {
isok = true
}
// ++Todo conv: this.arrConfig = await globalroutines(null, 'readall', 'config', null)
return isok
},
async saveCfgServerKey(dataval: ICfgServer) {
console.log('saveCfgServerKey dataval', dataval)
const ris = await Api.SendReq('/admin/updateval', 'POST', { pairval: dataval })
.then((res) => {
})
},
async checkUpdates() {
console.log('checkUpdates')
const userStore = useUserStore()
// if (userStore.my._id === '')
// return false // Login not made
this.networkDataReceived = false
const ris = await Api.SendReq('/checkupdates', 'GET', null)
.then((res) => {
this.networkDataReceived = true
// console.log('******* checkUpdates RES :', res.data.cfgServer)
if (res.data.cfgServer) {
this.cfgServer = [...res.data.cfgServer]
// console.log('res.data.cfgServer', res.data.cfgServer)
}
// console.log('res.data.userslist', res.data.usersList)
if (res.data.usersList) {
userStore.setusersList(res.data.usersList)
}
if (res.data.last_msgs) {
// ++Todo conv: MessageStore.last_msgs = [...res.data.last_msgs]
}
// console.log('MessageStore.last_msgs', MessageStore.last_msgs)
// console.log('********** res', 'todos', todos, 'checkPending', checkPending)
// After Login will store into the indexedDb...
return res
})
.catch((error) => {
console.log('error checkUpdates', error)
userStore.setErrorCatch(error)
return error
})
},
async loadSite() {
const userStore = useUserStore()
// console.log('CalendarStore: loadAfterLogin')
// Load local data
const showall = userStore.isAdmin || userStore.isManager ? '1' : '0'
const myuserid = (userStore.my._id) ? userStore.my._id : '0'
// CalendarStore.editable = false
return Api.SendReq(`/loadsite/${myuserid}/${process.env.APP_ID}/${process.env.APP_VERSION}`, 'GET', null)
.then((res) => {
// console.log('____________________________ res', res)
if (res.status === 200) {
/* CalendarStore.bookedevent = (res.data.bookedevent) ? res.data.bookedevent : []
CalendarStore.eventlist = (res.data.eventlist) ? res.data.eventlist : []
CalendarStore.operators = (res.data.operators) ? res.data.operators : []
CalendarStore.internalpages = (res.data.internalpages) ? res.data.internalpages : []
CalendarStore.wheres = (res.data.wheres) ? res.data.wheres : []
CalendarStore.contribtype = (res.data.contribtype) ? res.data.contribtype : []
*/
this.settings = (res.data.settings) ? [...res.data.settings] : []
this.disciplines = (res.data.disciplines) ? [...res.data.disciplines] : []
this.paymenttypes = (res.data.paymenttypes) ? [...res.data.paymenttypes] : []
this.gallery = (res.data.gallery) ? [...res.data.gallery] : []
this.calzoom = (res.data.calzoom) ? [...res.data.calzoom] : []
this.producers = (res.data.producers) ? [...res.data.producers] : []
this.storehouses = (res.data.storehouses) ? [...res.data.storehouses] : []
this.groups = (res.data.groups) ? [...res.data.groups] : []
this.resps = (res.data.resps) ? [...res.data.resps] : []
this.workers = (res.data.workers) ? [...res.data.workers] : []
// @ts-ignore
this.departments = (res.data.departments) ? [...res.data.departments] : []
// console.log('res.data.cart', res.data.cart)
/* if (res.data.cart)
Products.cart = (res.data.cart) ? { ...res.data.cart } : {}
else
Products.cart = { items: [], totalPrice: 0, totalQty: 0, userId: '' }
Products.orders = (res.data.orders) ? [...res.data.orders] : []
*/
if (showall) {
this.newstosent = (res.data.newstosent) ? [...res.data.newstosent] : []
this.mailinglist = (res.data.mailinglist) ? [...res.data.mailinglist] : []
this.mypage = (res.data.mypage) ? [...res.data.mypage] : []
}
// console.log('res.data.myuser', res.data.myuser)
if (res.data.myuser) {
userStore.authUser(res.data.myuser)
userStore.updateLocalStorage(res.data.myuser)
} else {
// User not exist !!
}
const islogged = localStorage.getItem(toolsext.localStorage.username)
console.log('islogged', islogged)
// CalendarStore.editable = userStore.isAdmin || userStore.isManager || userStore.isTutor
if (res.data.myuser === null) {
if (islogged) {
// Fai Logout
console.log('Fai Logout', 'islogged', islogged)
userStore.logout()
this.rightDrawerOpen = true
return false
}
}
}
return true
}).then((res) => res).catch((error) => {
console.log('error dbLoad', error)
// userStore.setErrorCatch(error)
return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, toolsext.ERR_GENERICO, error)
})
},
getArrStrByValueBinary(mythis: any, col: IColGridTable, val: any) {
const arr = this.getArrByValueBinary(mythis, col, val)
if (arr.length > 0) return arr.join(' - ')
return '[---]'
},
getArrByValueBinary(mythis: any, col: IColGridTable, val: any) {
if (col.jointable) {
const mylist = this.getTableJoinByName(col.jointable)
const key = fieldsTable.getKeyByTable(col.jointable)
const myres: any = []
mylist.forEach((myrec: any) => {
if (tools.isBitActive(val, myrec[key])) myres.push(mythis.t(myrec.label))
})
return myres
}
return []
},
getValueByTable(col: IColGridTable, val: any) {
if (col.jointable) {
const mylist = this.getTableJoinByName(col.jointable)
const key = fieldsTable.getKeyByTable(col.jointable)
const collab = fieldsTable.getLabelByTable(col.jointable)
// console.table(mylist)
let risultato = ''
if (tools.isObject(collab)) {
risultato = mylist.filter((myrec: any) => myrec.username === val).map(collab)
} else {
const myris = mylist.find((myrec: any) => myrec[key] === val)
risultato = myris[collab]
}
if (key === 'username') {
console.log('key=', key, 'collab', collab, 'val', val)
console.log('myris', risultato)
}
return risultato
}
return ''
},
getMultiValueByTable(col: IColGridTable, arrval: any) {
// console.log('getMultiValueByTable')
if (col.jointable) {
const mylist = this.getTableJoinByName(col.jointable)
const key = fieldsTable.getKeyByTable(col.jointable)
const collab = fieldsTable.getLabelByTable(col.jointable)
// console.table(mylist)
// console.log('key=', key, 'collab', collab, 'val', collab)
const myris = mylist.filter((myrec: any) => arrval.includes(myrec[key]))
// console.log('myris', myris)
if (myris) {
console.log('collab', collab)
if (tools.isObject(collab)) return myris.map(collab)
return myris.map((rec: any) => rec[collab])
}
return ''
}
return ''
},
getTableJoinByName(table: string) {
if (table === 'permissions') return [shared_consts.Permissions.Admin, shared_consts.Permissions.Manager, shared_consts.Permissions.Teacher, shared_consts.Permissions.Tutor, shared_consts.Permissions.Editor, shared_consts.Permissions.Zoomeri, shared_consts.Permissions.Department]
if (table === 'accepted') return [shared_consts.Accepted.CHECK_READ_GUIDELINES, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI]
if (table === 'fieldstype') return costanti.FieldTypeArr
if (table === 'metodo_pagamento') return tools.SelectMetodiPagamento
return this.getListByTable(table)
},
},
})