- (Part 2 - Upgrade Components Quasar)

This commit is contained in:
Paolo Arena
2019-03-13 01:53:53 +01:00
parent 74ecc4f278
commit 67748ce94f
20 changed files with 570 additions and 526 deletions

View File

@@ -1,8 +1,8 @@
import Vue from 'vue'
import { Component, Watch } from 'vue-property-decorator'
import { ICfgServer, IDrag, IGlobalState, ITodo, ITodosState } from '@src/model'
import { SingleTodo } from '../SingleTodo'
import { ITodo, ITodosState, IDrag, IGlobalState, ICfgServer } from '@src/model'
import { tools } from '../../../store/Modules/tools'
@@ -11,82 +11,34 @@ import { UserStore } from '@store'
// _.cloneDeep( Per clonare un oggetto
import { Getter, State, Mutation } from 'vuex-class'
import { costanti } from '@src/store/Modules/costanti'
import { Getter, Mutation, State } from 'vuex-class'
const namespace: string = 'Todos'
import globalroutines from './../../../globalroutines/index'
@Component({
components: { SingleTodo },
filters: {
capitalize: function (value) {
if (!value) return ''
capitalize(value) {
if (!value) { return '' }
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
}
}
})
export default class Todo extends Vue {
$q: any
filter: boolean = false
title: string = ''
todotop: string = ''
todobottom: string = ''
drag: boolean = true
startpos: number = 0
listPriorityLabel: number[] = []
arrPrior: number[] = []
itemDragStart: any = null
polling = null
loadDone: boolean = false
public inddragging: number = -1
public service: any
public actualMaxPosition: number = 15
public scrollable = true
public tmpstrTodos: string = ''
public categoryAtt: string = ''
// public showtype: number = Todos.state.showtype
$refs: {
single: SingleTodo[]
}
@Getter('todos_dacompletare', { namespace })
public todos_dacompletare: (state: ITodosState, category: string) => ITodo[]
@Getter('todos_completati', { namespace })
public todos_completati: (state: ITodosState, category: string) => ITodo[]
@Watch('$route.params.category') changecat() {
this.categoryAtt = this.$route.params.category
}
get showtype () {
get showtype() {
return Todos.state.showtype
}
set showtype (value) {
set showtype(value) {
console.log('showtype', value)
GlobalStore.mutations.setShowType(value)
}
// clickaggshowtype () {
// console.log('1B) clickaggshowtype Todos.state.showtype=', Todos.state.showtype)
// Todos.state.showtype = costanti.ShowTypeTask.SHOW_ALL
// console.log('2B) Dopo: showtype=', this.showtype)
// }
loadval (e) {
console.log('1) loadval, showtype=', this.showtype)
this.showtype = Todos.state.showtype
console.log('2) Dopo: showtype=', this.showtype)
}
get doneTodosCount() {
return Todos.getters.doneTodosCount(this.categoryAtt)
}
@@ -106,7 +58,7 @@ export default class Todo extends Vue {
get todos_vista() {
let mystr = ''
const arr = Todos.getters.todos_dacompletare(this.categoryAtt)
for (let ind in arr) {
for (const ind in arr) {
mystr += this.getstrelem(arr[ind]) + '\n'
}
@@ -118,7 +70,6 @@ export default class Todo extends Vue {
// return todos_dacompletare(this.categoryAtt)
// }
// @Watch('$route', { immediate: true, deep: true })
// onUrlChange(newVal: any) {
// // Some action
@@ -132,46 +83,93 @@ export default class Todo extends Vue {
set reload_fromServer(value: number) {
Todos.state.reload_fromServer = value
}
public $q: any
public filter: boolean = false
public title: string = ''
public todotop: string = ''
public todobottom: string = ''
public drag: boolean = true
public startpos: number = 0
public listPriorityLabel: number[] = []
public arrPrior: number[] = []
public itemDragStart: any = null
public polling = null
public loadDone: boolean = false
public inddragging: number = -1
public service: any
public actualMaxPosition: number = 15
public scrollable = true
public tmpstrTodos: string = ''
public categoryAtt: string = ''
// public showtype: number = Todos.state.showtype
getmyid(id) {
public $refs: {
single: SingleTodo[]
}
@Getter('todos_dacompletare', { namespace })
public todos_dacompletare: (state: ITodosState, category: string) => ITodo[]
@Getter('todos_completati', { namespace })
public todos_completati: (state: ITodosState, category: string) => ITodo[]
@Watch('$route.params.category') public changecat() {
this.categoryAtt = this.$route.params.category
}
// clickaggshowtype () {
// console.log('1B) clickaggshowtype Todos.state.showtype=', Todos.state.showtype)
// Todos.state.showtype = costanti.ShowTypeTask.SHOW_ALL
// console.log('2B) Dopo: showtype=', this.showtype)
// }
public loadval(e) {
console.log('1) loadval, showtype=', this.showtype)
this.showtype = Todos.state.showtype
console.log('2) Dopo: showtype=', this.showtype)
}
public getmyid(id) {
return 'row' + id
}
showTask(field_value) {
public showTask(field_value) {
return field_value === tools.MenuAction.SHOW_TASK
}
onStart() {
public onStart() {
this.startpos = 0
this.itemDragStart = null
}
logelem(mystr, elem) {
public logelem(mystr, elem) {
console.log(mystr, 'elem [', elem._id, '] ', elem.descr, ' Pr(', this.getPriorityByInd(elem.priority), ') [', elem.id_prev, '] modif=', elem.modified)
}
getstrelem(elem) {
public getstrelem(elem) {
return 'elem [' + elem._id + '] ' + elem.descr + ' Pr(' + this.getPriorityByInd(elem.priority) + ') [ID_PREV=' + elem.id_prev + '] modif=' + elem.modified + ' '
}
getTitlePriority(priority) {
public getTitlePriority(priority) {
let cl = ''
if (priority === tools.Todos.PRIORITY_HIGH)
if (priority === tools.Todos.PRIORITY_HIGH) {
cl = 'high_priority'
else if (priority === tools.Todos.PRIORITY_NORMAL)
}
else if (priority === tools.Todos.PRIORITY_NORMAL) {
cl = 'medium_priority'
else if (priority === tools.Todos.PRIORITY_LOW)
}
else if (priority === tools.Todos.PRIORITY_LOW) {
cl = 'low_priority'
}
return cl + ' titlePriority'
}
logga_arr(myarr: ITodo[]) {
public logga_arr(myarr: ITodo[]) {
let mystr = '\n'
myarr.forEach(item => {
myarr.forEach((item) => {
mystr += '[' + item.pos + '] ' + item.descr + ' Pr(' + this.getPriorityByInd(item.priority) + ') [' + item.id_prev + '] modif=' + item.modified + '\n'
// mystr += '[' + item.pos + '] ' + item.descr + '\n'
})
@@ -179,7 +177,7 @@ export default class Todo extends Vue {
return mystr
}
async onEnd(itemdragend) {
public async onEnd(itemdragend) {
console.log('************ END DRAG: ', itemdragend)
this.inddragging = -1
@@ -187,31 +185,22 @@ export default class Todo extends Vue {
}
private getElementIndex(el: any) {
return [].slice.call(el.parentElement.children).indexOf(el)
}
private getElementOldIndex(el: any) {
return parseInt(el.attributes['index'].value)
}
created() {
public created() {
const $service = this.$dragula.$service
$service.options('first',
{
// isContainer: function (el) {
// return el.classList.contains('dragula-container')
// },
moves: function (el, source, handle, sibling) {
moves(el, source, handle, sibling) {
// console.log('moves')
return !el.classList.contains('donotdrag') // elements are always draggable by default
},
accepts: function (el, target, source, sibling) {
accepts(el, target, source, sibling) {
// console.log('accepts dragging '+ el.id + ' from ' + source.id + ' to ' + target.id)
return true // elements can be dropped in any of the `containers` by default
},
invalid: function (el, handle) {
invalid(el, handle) {
// console.log('invalid')
return el.classList.contains('donotdrag') // don't prevent any drags from initiating by default
},
@@ -219,7 +208,7 @@ export default class Todo extends Vue {
})
$service.eventBus.$on('dragend', (args) => {
let itemdragend: IDrag = {
const itemdragend: IDrag = {
category: this.categoryAtt,
newIndex: this.getElementIndex(args.el),
oldIndex: this.getElementOldIndex(args.el)
@@ -238,11 +227,10 @@ export default class Todo extends Vue {
this.scrollable = true
})
this.load()
}
mounted () {
public mounted() {
// console.log('*** MOUNTED ***')
this.categoryAtt = this.$route.params.category
@@ -257,25 +245,25 @@ export default class Todo extends Vue {
}
}
setarrPriority() {
public setarrPriority() {
this.arrPrior = []
const arr = tools.selectPriority[UserStore.state.lang]
if (arr) {
arr.forEach(rec => {
arr.forEach((rec) => {
this.arrPrior.push(rec.value)
})
}
// console.log('Array PRIOR:', this.arrPrior)
}
async load() {
public async load() {
console.log('LOAD TODO....')
this.categoryAtt = this.$route.params.category
// Set last category selected
localStorage.setItem(tools.localStorage.categorySel, this.categoryAtt)
for (let todosKey in tools.Todos) {
for (const todosKey in tools.Todos) {
this.listPriorityLabel.push(tools.Todos[todosKey])
}
// console.log('Priority:' + this.listPriorityLabel)
@@ -288,24 +276,24 @@ export default class Todo extends Vue {
}
// Call to check if need to refresh
checkUpdate_everytime() {
public checkUpdate_everytime() {
this.polling = setInterval(() => {
this.checkUpdate()
}, 60000)
}
beforeDestroy() {
public beforeDestroy() {
clearInterval(this.polling)
}
getPriorityByInd(index) {
public getPriorityByInd(index) {
// console.log('LANG in PRIOR', UserStore.state.lang)
try {
const arr = tools.selectPriority[UserStore.state.lang]
for (let rec of arr) {
if (rec.value === index)
for (const rec of arr) {
if (rec.value === index) {
return rec.label
}
}
} catch (e) {
@@ -313,22 +301,24 @@ export default class Todo extends Vue {
return ''
}
isRegistered() {
public isRegistered() {
return localStorage.getItem(tools.localStorage.userId) !== ''
}
mydeleteItem(idobj: string) {
public mydeleteItem(idobj: string) {
console.log('mydeleteItem', idobj)
return Todos.actions.deleteItem({ cat: this.categoryAtt, idobj })
}
insertTodo(atfirst: boolean = false) {
public insertTodo(atfirst: boolean = false) {
let descr = this.todobottom.trim()
if (atfirst)
if (atfirst) {
descr = this.todotop.trim()
}
if (descr === '')
if (descr === '') {
return
}
if (UserStore.state.userId === undefined) {
this.$q.notify(this.$t('todo.usernotdefined'))
@@ -341,8 +331,8 @@ export default class Todo extends Vue {
return
}
let myobj: ITodo = {
descr: descr,
const myobj: ITodo = {
descr,
category: this.categoryAtt
}
@@ -350,18 +340,20 @@ export default class Todo extends Vue {
.then((data) => {
console.log('data', data)
if (data !== null)
if (data !== null) {
this.$q.notify(data)
}
// empty the field
if (atfirst)
if (atfirst) {
this.todotop = ''
else
}
else {
this.todobottom = ''
}
})
}
/*
sendMessageToSW(recdata, method) {
@@ -376,7 +368,7 @@ export default class Todo extends Vue {
}
*/
async updateitem({ myitem, field }) {
public async updateitem({ myitem, field }) {
console.log('calling MODIFY updateitem', myitem, field)
// Update the others components...
@@ -394,14 +386,14 @@ export default class Todo extends Vue {
}
deselectAllRows(item: ITodo, check, onlythis: boolean = false) {
public deselectAllRows(item: ITodo, check, onlythis: boolean = false) {
// console.log('deselectAllRows : ', item)
for (let i = 0; i < this.$refs.single.length; i++) {
let contr = <SingleTodo>this.$refs.single[i]
const contr = this.$refs.single[i] as SingleTodo
// @ts-ignore
let id = contr.itemtodo._id
const id = contr.itemtodo._id
// Don't deselect the actual clicked!
let des = false
if (onlythis) {
@@ -416,11 +408,11 @@ export default class Todo extends Vue {
}
}
checkUpdate() {
public checkUpdate() {
Todos.actions.waitAndcheckPendingMsg()
}
loadMoreTodo(index, done) {
public loadMoreTodo(index, done) {
setTimeout(() => {
this.actualMaxPosition += 15
done()
@@ -428,7 +420,7 @@ export default class Todo extends Vue {
}
getArrTodos() {
public getArrTodos() {
let mystr = ''
@@ -437,7 +429,7 @@ export default class Todo extends Vue {
.then((alldata) => {
const myrecs = [...alldata]
myrecs.forEach(rec => {
myrecs.forEach((rec) => {
mystr = mystr + rec.descr + rec.completed + '] ['
})
@@ -445,6 +437,14 @@ export default class Todo extends Vue {
})
}
private getElementIndex(el: any) {
return [].slice.call(el.parentElement.children).indexOf(el)
}
private getElementOldIndex(el: any) {
return parseInt(el.attributes.index.value, 10)
}
// setArrTodos() {
//
// let mystr = ''
@@ -458,5 +458,4 @@ export default class Todo extends Vue {
// }
//
}