-
Notifications
You must be signed in to change notification settings - Fork 0
/
collection.js
106 lines (84 loc) · 2.75 KB
/
collection.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
105
106
class Collection {
#_settings = {
storeName: 'data_collection',
};
#_objectNames;
#_objects;
#_arrayNames;
#_arrays;
constructor(settings = {}) {
this.#_objects = [];
this.#_objectNames = {};
this.#_arrays = [];
this.#_arrayNames = {};
Object.assign(this.#_settings, settings);
}
addArray(name, arr = []) {
if (!name || typeof name !== 'string') {
console.error(`Array requires name to be given`);
return null;
} else if (!Array.isArray(arr)) {
console.error(`This is not an array`);
return null;
} else if (arr.length === 0) {
console.error(`Array can not be empty`);
return null;
}
this.#_arrays.push(arr);
this.#_arrayNames[name] = this.#_arrays.length - 1;
return arr;
}
getArray(name) {
let array = this.#_arrayNames[name] !== undefined ? this.#_arrays[this.#_arrayNames[name]] : null;
if (!array) { return array; }
return JSON.parse(JSON.stringify(array));
}
addObject(name, obj = {}) {
if (!name || typeof name !== 'string') {
console.error(`Object requires name to be given`);
return null;
} else if (Object.keys(obj).length === 0) {
console.error(`Object can not be empty`);
return null;
}
this.#_objects.push(obj);
this.#_objectNames[name] = this.#_objects.length - 1;
return obj;
}
getObject(name) {
let obj = this.#_objectNames[name] !== undefined ? this.#_objects[this.#_objectNames[name]] : null;
if (!obj) { return obj; }
return Object.freeze(obj);
}
store() {
const data = [
this.#_objectNames,
this.#_objects,
this.#_arrayNames,
this.#_arrays
];
localStorage.setItem(this.#_settings.storeName, JSON.stringify(data));
}
retrieve() {
let storage = localStorage.getItem(this.#_settings.storeName);
if (!storage) { return false; }
let data = JSON.parse(storage);
this.#_objects = data[1] ?? [];
this.#_objectNames = data[0] ?? {};
this.#_arrays = data[3] ?? [];
this.#_arrayNames = data[2] ?? {};
}
clearAll() {
this.clearInstance();
this.clearStorage();
}
clearInstance() {
this.#_objects = [];
this.#_objectNames = {};
this.#_arrays = [];
this.#_arrayNames = {};
}
clearStorage() {
localStorage.setItem(this.#_settings.storeName, JSON.stringify([]));
}
}