2019-02-03 14:40:20 +01:00
|
|
|
import { IGlobalState, ITodo, ITodosState } from 'model'
|
2019-01-14 22:40:30 +01:00
|
|
|
import { storeBuilder } from './Store/Store'
|
|
|
|
|
|
2019-02-01 04:10:31 +01:00
|
|
|
import Api from '@api'
|
|
|
|
|
import { rescodes } from './rescodes'
|
2019-02-08 17:10:25 +01:00
|
|
|
import { GlobalStore, Todos, UserStore } from '@store'
|
2019-02-03 14:40:20 +01:00
|
|
|
import globalroutines from './../../globalroutines/index'
|
2019-02-12 12:06:01 +01:00
|
|
|
import { Mutation } from 'vuex-module-decorators'
|
|
|
|
|
import { serv_constants } from '@src/store/Modules/serv_constants'
|
2019-02-01 04:10:31 +01:00
|
|
|
|
2019-01-14 22:40:30 +01:00
|
|
|
|
|
|
|
|
const state: ITodosState = {
|
2019-02-01 04:10:31 +01:00
|
|
|
visuOnlyUncompleted: false,
|
|
|
|
|
networkDataReceived: false,
|
2019-02-03 14:40:20 +01:00
|
|
|
todos: [],
|
|
|
|
|
todos_changed: 1,
|
2019-02-04 03:09:15 +01:00
|
|
|
reload_fromServer: false,
|
|
|
|
|
testpao: 'Test',
|
|
|
|
|
insidePending: false
|
2019-01-14 22:40:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const b = storeBuilder.module<ITodosState>('TodosModule', state)
|
2019-02-01 04:10:31 +01:00
|
|
|
const stateGetter = b.state()
|
2019-01-14 22:40:30 +01:00
|
|
|
|
|
|
|
|
// Getters
|
|
|
|
|
namespace Getters {
|
|
|
|
|
|
|
|
|
|
const visuOnlyUncompleted = b.read(state => state.visuOnlyUncompleted, 'visuOnlyUncompleted')
|
|
|
|
|
|
|
|
|
|
export const getters = {
|
|
|
|
|
get visuOnlyUncompleted() {
|
|
|
|
|
return visuOnlyUncompleted
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
namespace Mutations {
|
|
|
|
|
|
2019-02-03 14:40:20 +01:00
|
|
|
function setTestpao(state: ITodosState, testpao: String) {
|
|
|
|
|
state.testpao = testpao
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function setTodos_changed(state: ITodosState) {
|
|
|
|
|
state.todos_changed++
|
2019-02-08 17:10:25 +01:00
|
|
|
mutations.setTestpao('Cambiato : ' + String(state.todos_changed))
|
|
|
|
|
console.log('******************************* state.todos_changed', state.todos_changed)
|
2019-02-03 14:40:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const mutations = {
|
|
|
|
|
setTestpao: b.commit(setTestpao),
|
2019-02-03 19:28:06 +01:00
|
|
|
setTodos_changed: b.commit(setTodos_changed)
|
2019-02-03 14:40:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function consolelogpao(strlog, strlog2 = '', strlog3 = '') {
|
|
|
|
|
globalroutines(null, 'log', strlog + strlog2 + strlog3, null)
|
2019-01-14 22:40:30 +01:00
|
|
|
}
|
|
|
|
|
|
2019-02-03 14:40:20 +01:00
|
|
|
|
2019-01-14 22:40:30 +01:00
|
|
|
namespace Actions {
|
|
|
|
|
|
2019-02-02 20:13:06 +01:00
|
|
|
function json2array(json) {
|
|
|
|
|
let result = []
|
|
|
|
|
let keys = Object.keys(json)
|
|
|
|
|
keys.forEach(function (key) {
|
2019-02-01 04:10:31 +01:00
|
|
|
result.push(json[key])
|
2019-02-02 20:13:06 +01:00
|
|
|
})
|
|
|
|
|
return result
|
2019-02-01 04:10:31 +01:00
|
|
|
}
|
|
|
|
|
|
2019-02-04 03:09:15 +01:00
|
|
|
// If something in the call of Service Worker went wrong (Network or Server Down), then retry !
|
|
|
|
|
async function sendSwMsgIfAvailable() {
|
|
|
|
|
let something = false
|
|
|
|
|
|
2019-02-08 17:10:25 +01:00
|
|
|
if ('serviceWorker' in navigator) {
|
2019-02-12 12:06:01 +01:00
|
|
|
console.log(' -------- sendSwMsgIfAvailable')
|
2019-02-08 17:10:25 +01:00
|
|
|
|
|
|
|
|
let count = await checkPendingMsg(null)
|
|
|
|
|
if (count > 0) {
|
2019-02-04 03:09:15 +01:00
|
|
|
return navigator.serviceWorker.ready
|
|
|
|
|
.then(function (sw) {
|
|
|
|
|
|
|
|
|
|
globalroutines(null, 'readall', 'swmsg')
|
|
|
|
|
.then(function (arr_recmsg) {
|
2019-02-07 00:53:10 +01:00
|
|
|
// let recclone = [...arr_recmsg]
|
2019-02-04 03:09:15 +01:00
|
|
|
if (arr_recmsg.length > 0) {
|
|
|
|
|
|
2019-02-12 12:06:01 +01:00
|
|
|
// console.log(' TROVATI MSG PENDENTI ! ORA LI MANDO: ', arr_recmsg)
|
2019-02-04 03:09:15 +01:00
|
|
|
|
2019-02-07 00:53:10 +01:00
|
|
|
// console.log('---------------------- 2) navigator (2) .serviceWorker.ready')
|
2019-02-04 03:09:15 +01:00
|
|
|
|
|
|
|
|
something = true
|
|
|
|
|
for (let rec of arr_recmsg) {
|
2019-02-12 12:06:01 +01:00
|
|
|
// console.log(' .... sw.sync.register ( ', rec._id)
|
|
|
|
|
// if ('SyncManager' in window) {
|
|
|
|
|
// sw.sync.register(rec._id)
|
|
|
|
|
// } else {
|
2019-02-08 17:10:25 +01:00
|
|
|
// #Todo ++ Alternative to SyncManager
|
|
|
|
|
Api.syncAlternative(rec._id)
|
2019-02-12 12:06:01 +01:00
|
|
|
// }
|
2019-02-04 03:09:15 +01:00
|
|
|
}
|
2019-02-08 17:10:25 +01:00
|
|
|
return something
|
2019-02-04 03:09:15 +01:00
|
|
|
}
|
|
|
|
|
})
|
2019-02-08 17:10:25 +01:00
|
|
|
|
2019-02-04 03:09:15 +01:00
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
2019-02-08 17:10:25 +01:00
|
|
|
|
2019-02-04 03:09:15 +01:00
|
|
|
return something
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function waitAndcheckPendingMsg(context) {
|
|
|
|
|
|
|
|
|
|
await aspettansec(1000)
|
|
|
|
|
|
|
|
|
|
return await checkPendingMsg(context)
|
|
|
|
|
.then(ris => {
|
|
|
|
|
if (ris) {
|
2019-02-12 12:06:01 +01:00
|
|
|
console.log('risPending = ', ris)
|
2019-02-04 03:09:15 +01:00
|
|
|
const result = sendSwMsgIfAvailable()
|
|
|
|
|
.then(something => {
|
|
|
|
|
if (something) {
|
|
|
|
|
// Refresh data
|
|
|
|
|
waitAndRefreshData(context)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function waitAndRefreshData(context) {
|
|
|
|
|
await aspettansec(3000)
|
|
|
|
|
|
|
|
|
|
return await dbLoadTodo(context, false)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function checkPendingMsg(context) {
|
2019-02-04 04:17:50 +01:00
|
|
|
// console.log('checkPendingMsg')
|
2019-02-04 03:09:15 +01:00
|
|
|
|
2019-02-12 12:06:01 +01:00
|
|
|
const config = await globalroutines(null, 'readall', 'config', null)
|
|
|
|
|
// console.log('config', config)
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
if (config) {
|
|
|
|
|
if (config[1].stateconn !== undefined) {
|
|
|
|
|
// console.log('config.stateconn', config[1].stateconn)
|
|
|
|
|
|
|
|
|
|
if (config[1].stateconn !== GlobalStore.state.stateConnection) {
|
|
|
|
|
GlobalStore.mutations.setStateConnection(config[1].stateconn)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2019-02-04 03:09:15 +01:00
|
|
|
return new Promise(function (resolve, reject) {
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
globalroutines(null, 'readall', 'swmsg')
|
|
|
|
|
.then(function (arr_recmsg) {
|
|
|
|
|
if (arr_recmsg.length > 0) {
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
// Check if there is something
|
|
|
|
|
globalroutines(null, 'count', 'swmsg')
|
|
|
|
|
.then(function (count) {
|
|
|
|
|
if (count > 0) {
|
2019-02-04 04:17:50 +01:00
|
|
|
console.log('count = ', count)
|
2019-02-04 03:09:15 +01:00
|
|
|
return resolve(true)
|
|
|
|
|
} else {
|
|
|
|
|
return resolve(false)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.catch(e => {
|
|
|
|
|
return reject()
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function dbLoadTodo(context, checkPending: boolean = false) {
|
|
|
|
|
console.log('dbLoadTodo', checkPending)
|
2019-02-01 04:10:31 +01:00
|
|
|
|
2019-02-12 12:06:01 +01:00
|
|
|
if (UserStore.state.userId === '')
|
|
|
|
|
return false // Login not made
|
2019-02-01 04:10:31 +01:00
|
|
|
|
|
|
|
|
let call = process.env.MONGODB_HOST + '/todos/' + UserStore.state.userId
|
|
|
|
|
|
2019-02-02 20:13:06 +01:00
|
|
|
state.networkDataReceived = false
|
|
|
|
|
|
2019-02-12 12:06:01 +01:00
|
|
|
let ris = await Api.SendReq(call, 'GET', null)
|
|
|
|
|
.then(({ resData, body, status }) => {
|
2019-02-02 20:13:06 +01:00
|
|
|
state.networkDataReceived = true
|
2019-02-01 04:10:31 +01:00
|
|
|
|
2019-02-04 03:09:15 +01:00
|
|
|
// console.log('******* UPDATE TODOS.STATE.TODOS !:', resData.todos)
|
2019-02-12 12:06:01 +01:00
|
|
|
if (body.todos) {
|
|
|
|
|
state.todos = [...body.todos]
|
|
|
|
|
Todos.mutations.setTodos_changed()
|
|
|
|
|
}
|
2019-02-04 03:09:15 +01:00
|
|
|
|
2019-02-09 18:04:49 +01:00
|
|
|
console.log('********** resData', resData, 'state.todos', state.todos, 'checkPending', checkPending)
|
2019-02-01 04:10:31 +01:00
|
|
|
|
2019-02-02 20:13:06 +01:00
|
|
|
// After Login will store into the indexedDb...
|
2019-02-01 04:10:31 +01:00
|
|
|
|
2019-02-12 12:06:01 +01:00
|
|
|
return { status }
|
2019-02-01 04:10:31 +01:00
|
|
|
})
|
2019-02-12 12:06:01 +01:00
|
|
|
.catch(error => {
|
2019-02-09 18:04:49 +01:00
|
|
|
console.log('error=', error)
|
2019-02-06 18:47:54 +01:00
|
|
|
UserStore.mutations.setErrorCatch(error)
|
2019-02-12 12:06:01 +01:00
|
|
|
return { status }
|
2019-02-01 04:10:31 +01:00
|
|
|
})
|
2019-02-02 20:13:06 +01:00
|
|
|
|
2019-02-12 12:06:01 +01:00
|
|
|
console.log('ris : ', ris)
|
|
|
|
|
console.log('ris STATUS: ', ris.status)
|
2019-02-04 03:09:15 +01:00
|
|
|
|
2019-02-03 14:40:20 +01:00
|
|
|
if (!Todos.state.networkDataReceived) {
|
2019-02-09 18:04:49 +01:00
|
|
|
|
|
|
|
|
if (ris.status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN) {
|
|
|
|
|
consolelogpao('UNAUTHORIZING... TOKEN EXPIRED... !! ')
|
|
|
|
|
} else {
|
2019-02-12 12:06:01 +01:00
|
|
|
consolelogpao('NETWORK UNREACHABLE ! (Error in fetch)', UserStore.getters.getServerCode, ris.status)
|
2019-02-09 18:04:49 +01:00
|
|
|
}
|
2019-02-03 14:40:20 +01:00
|
|
|
// Read all data from IndexedDB Store into Memory
|
2019-02-03 19:28:06 +01:00
|
|
|
await updateArrayInMemory(context)
|
2019-02-04 03:09:15 +01:00
|
|
|
} else {
|
2019-02-12 12:06:01 +01:00
|
|
|
if (ris.status === rescodes.OK && checkPending) {
|
2019-02-04 03:09:15 +01:00
|
|
|
waitAndcheckPendingMsg(context)
|
|
|
|
|
}
|
2019-02-03 14:40:20 +01:00
|
|
|
}
|
|
|
|
|
}
|
2019-02-02 20:13:06 +01:00
|
|
|
|
2019-02-03 19:28:06 +01:00
|
|
|
async function updateArrayInMemory(context) {
|
2019-02-09 18:04:49 +01:00
|
|
|
// console.log('Update the array in memory, from todos table from IndexedDb')
|
2019-02-03 19:28:06 +01:00
|
|
|
await globalroutines(null, 'updateinMemory', 'todos', null)
|
|
|
|
|
.then(() => {
|
2019-02-04 03:09:15 +01:00
|
|
|
// console.log('updateArrayInMemory! ')
|
2019-02-03 19:28:06 +01:00
|
|
|
return true
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2019-02-03 14:40:20 +01:00
|
|
|
function aspettansec(numsec) {
|
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
|
|
|
setTimeout(function () {
|
|
|
|
|
resolve('anything')
|
|
|
|
|
}, numsec)
|
|
|
|
|
})
|
|
|
|
|
}
|
2019-02-02 20:13:06 +01:00
|
|
|
|
2019-02-03 14:40:20 +01:00
|
|
|
async function testfunc() {
|
|
|
|
|
while (true) {
|
|
|
|
|
consolelogpao('testfunc')
|
2019-02-08 17:10:25 +01:00
|
|
|
Todos.mutations.setTodos_changed()
|
2019-02-03 19:28:06 +01:00
|
|
|
// console.log('Todos.state.todos_changed:', Todos.state.todos_changed)
|
2019-02-03 14:40:20 +01:00
|
|
|
await aspettansec(5000)
|
|
|
|
|
}
|
2019-02-01 04:10:31 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function dbSaveTodo(context, itemtodo: ITodo) {
|
2019-02-03 00:51:58 +01:00
|
|
|
return await dbInsertSaveTodo(context, itemtodo, 'PATCH')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function dbInsertTodo(context, itemtodo: ITodo) {
|
|
|
|
|
return await dbInsertSaveTodo(context, itemtodo, 'POST')
|
|
|
|
|
}
|
|
|
|
|
|
2019-02-03 02:40:24 +01:00
|
|
|
function UpdateNewIdFromDB(oldItem, newItem, method) {
|
2019-02-09 18:04:49 +01:00
|
|
|
// console.log('PRIMA state.todos', state.todos)
|
|
|
|
|
// console.log('ITEM', newItem)
|
2019-02-03 02:40:24 +01:00
|
|
|
if (method === 'POST') {
|
|
|
|
|
state.todos.push(newItem)
|
2019-02-08 17:10:25 +01:00
|
|
|
Todos.mutations.setTodos_changed()
|
2019-02-03 14:40:20 +01:00
|
|
|
// } else if (method === 'PATCH') {
|
|
|
|
|
// state.todos.map(item => {
|
|
|
|
|
// if (item._id === newItem._id) {
|
|
|
|
|
// return newItem
|
|
|
|
|
// }
|
|
|
|
|
// })
|
2019-02-03 02:40:24 +01:00
|
|
|
}
|
2019-02-03 03:44:25 +01:00
|
|
|
|
|
|
|
|
|
2019-02-09 18:04:49 +01:00
|
|
|
// console.log('DOPO state.todos', state.todos)
|
2019-02-03 02:40:24 +01:00
|
|
|
}
|
|
|
|
|
|
2019-02-03 00:51:58 +01:00
|
|
|
async function dbInsertSaveTodo(context, itemtodo: ITodo, method) {
|
|
|
|
|
console.log('dbInsertSaveTodo', itemtodo, method)
|
2019-02-08 17:10:25 +01:00
|
|
|
let call = process.env.MONGODB_HOST + '/todos'
|
|
|
|
|
|
2019-02-12 12:06:01 +01:00
|
|
|
if (UserStore.state.userId === '')
|
|
|
|
|
return false // Login not made
|
|
|
|
|
|
2019-02-08 17:10:25 +01:00
|
|
|
if (method !== 'POST')
|
|
|
|
|
call += '/' + itemtodo._id
|
2019-02-01 04:10:31 +01:00
|
|
|
|
2019-02-11 02:58:53 +01:00
|
|
|
console.log('TODO TO SAVE: ', itemtodo)
|
|
|
|
|
|
2019-02-12 12:06:01 +01:00
|
|
|
let res = await Api.SendReq(call, method, itemtodo)
|
2019-02-08 17:10:25 +01:00
|
|
|
.then(({ res, newItem }) => {
|
|
|
|
|
console.log('dbInsertSaveTodo RIS =', newItem)
|
|
|
|
|
if (newItem) {
|
2019-02-03 02:40:24 +01:00
|
|
|
|
|
|
|
|
// Update ID on local
|
2019-02-08 17:10:25 +01:00
|
|
|
UpdateNewIdFromDB(itemtodo, newItem, method)
|
2019-02-03 02:40:24 +01:00
|
|
|
}
|
2019-02-01 04:10:31 +01:00
|
|
|
})
|
|
|
|
|
.catch((error) => {
|
2019-02-06 18:47:54 +01:00
|
|
|
UserStore.mutations.setErrorCatch(error)
|
|
|
|
|
return UserStore.getters.getServerCode
|
2019-02-01 04:10:31 +01:00
|
|
|
})
|
|
|
|
|
|
2019-02-02 20:13:06 +01:00
|
|
|
return res
|
|
|
|
|
}
|
|
|
|
|
|
2019-02-03 03:44:25 +01:00
|
|
|
async function dbDeleteTodo(context, item: ITodo) {
|
2019-02-09 18:04:49 +01:00
|
|
|
// console.log('dbDeleteTodo', item)
|
2019-02-03 03:44:25 +01:00
|
|
|
let call = process.env.MONGODB_HOST + '/todos/' + item._id
|
2019-02-02 20:13:06 +01:00
|
|
|
|
2019-02-12 12:06:01 +01:00
|
|
|
if (UserStore.state.userId === '')
|
|
|
|
|
return false // Login not made
|
2019-02-02 20:13:06 +01:00
|
|
|
|
2019-02-12 12:06:01 +01:00
|
|
|
let res = await Api.SendReq(call, 'DELETE', item)
|
2019-02-08 17:10:25 +01:00
|
|
|
.then(function ({ res, itemris }) {
|
2019-02-03 03:44:25 +01:00
|
|
|
|
2019-02-08 17:10:25 +01:00
|
|
|
if (res.status === 200) {
|
|
|
|
|
// Delete Item in to Array
|
|
|
|
|
state.todos.splice(state.todos.indexOf(item), 1)
|
|
|
|
|
|
|
|
|
|
Todos.mutations.setTodos_changed()
|
|
|
|
|
}
|
2019-02-03 03:44:25 +01:00
|
|
|
|
2019-02-02 20:13:06 +01:00
|
|
|
return rescodes.OK
|
|
|
|
|
})
|
|
|
|
|
.catch((error) => {
|
2019-02-06 18:47:54 +01:00
|
|
|
UserStore.mutations.setErrorCatch(error)
|
|
|
|
|
return UserStore.getters.getServerCode
|
2019-02-02 20:13:06 +01:00
|
|
|
})
|
2019-02-01 04:10:31 +01:00
|
|
|
|
|
|
|
|
return res
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function getTodosByCategory(context, category: string) {
|
|
|
|
|
let myarr = state.todos.filter((p) => {
|
|
|
|
|
return p.category === category
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
return myarr
|
|
|
|
|
}
|
|
|
|
|
|
2019-01-14 22:40:30 +01:00
|
|
|
export const actions = {
|
2019-02-03 00:51:58 +01:00
|
|
|
dbInsertTodo: b.dispatch(dbInsertTodo),
|
2019-02-01 04:10:31 +01:00
|
|
|
dbSaveTodo: b.dispatch(dbSaveTodo),
|
|
|
|
|
dbLoadTodo: b.dispatch(dbLoadTodo),
|
2019-02-02 20:13:06 +01:00
|
|
|
dbDeleteTodo: b.dispatch(dbDeleteTodo),
|
2019-02-03 19:28:06 +01:00
|
|
|
updateArrayInMemory: b.dispatch(updateArrayInMemory),
|
2019-02-04 03:09:15 +01:00
|
|
|
getTodosByCategory: b.dispatch(getTodosByCategory),
|
|
|
|
|
checkPendingMsg: b.dispatch(checkPendingMsg),
|
|
|
|
|
waitAndcheckPendingMsg: b.dispatch(waitAndcheckPendingMsg)
|
2019-01-14 22:40:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Module
|
|
|
|
|
const TodosModule = {
|
|
|
|
|
get state() {
|
|
|
|
|
return stateGetter()
|
|
|
|
|
},
|
|
|
|
|
getters: Getters.getters,
|
2019-02-03 14:40:20 +01:00
|
|
|
mutations: Mutations.mutations,
|
2019-01-14 22:40:30 +01:00
|
|
|
actions: Actions.actions
|
|
|
|
|
}
|
|
|
|
|
|
2019-02-01 04:10:31 +01:00
|
|
|
export default TodosModule
|