-
Notifications
You must be signed in to change notification settings - Fork 0
/
boodschappenlijst.js
104 lines (96 loc) · 2.22 KB
/
boodschappenlijst.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
var app = new Vue({
el: '#boodschappen',
data: {
search: '',
items: [],
groups: [],
add: '',
data: [],
test: 'bla'
},
computed: {
sortedItems: function (){
self = this;
items = this.getItems();
self.items = this.sortItems();
return self.items
}
},
created: function() {
return this.groupItems(this.sortedItems);
},
watch: {
search: function() {
this.filterItems();
}
},
methods: {
sortItems(items = this.items) {
list = items
list.sort((a, b) => (a.title > b.title) ? 1 : -1);
return list;
},
getItems() {
_data = '';
self = this;
$.ajax(
{
url: 'https://kevin.nodum.io/json/items',
success: function(result) {
self.items = result
},
async: false
}
);
},
filterItems() {
self = this;
items = this.items;
newItems = [];
items.forEach(function(item) {
if(self.itemInItemlist(item.title)) {
newItems.push({ title : item.title })
}
})
newItems = self.sortItems(newItems);
self.groupItems(newItems);
},
itemInItemlist(item) {
if(item.toLowerCase().indexOf(self.search.toLowerCase()) !== -1) {
return true
}
return false
},
groupItems(items) {
self = this;
self.groups = [];
groups = [];
items.forEach(function(item) {
$firstLetterOfItem = item.title.slice(0,1);
// Check if firstLetterOfItem exists in groups
$indexOfLetterInGroups = groups.map(function(e) { return e.letter; } ).indexOf($firstLetterOfItem);
if( $indexOfLetterInGroups > -1 ) {
values = groups[$indexOfLetterInGroups].values;
values.push(item.title);
} else {
groups.push({ letter : $firstLetterOfItem, values : [] });
// Reset $indexOfLetterInGroups because now we have an index :)
$indexOfLetterInGroups = groups.map(function(e) { return e.letter; } ).indexOf($firstLetterOfItem);
values = [item.title]
}
groups[$indexOfLetterInGroups].values = values
});
this.groups = groups;
return this.groups
},
addItemToList() {
self = this;
item = self.add;
self.items.push({title : item});
self.sortItems(self.items);
self.groupItems(self.items);
$.post('json/additem', {item : self.add}, function(data) {});
self.add = '';
}
}
});