104 lines
2.4 KiB
JavaScript
104 lines
2.4 KiB
JavaScript
import Database from '../Database';
|
|
|
|
const Realm = require('realm');
|
|
let realm = new Realm(Database);
|
|
|
|
class DirectoriesModel {
|
|
constructor() {
|
|
this.schema = 'Directories';
|
|
}
|
|
|
|
add(directory) {
|
|
realm.write(() => {
|
|
realm.create(this.schema, directory);
|
|
});
|
|
}
|
|
|
|
update(directory) {
|
|
realm.write(() => {
|
|
realm.create(this.schema, directory, true);
|
|
});
|
|
}
|
|
|
|
get(id) {
|
|
let tmp = realm.objects(this.schema).filtered('id = ' + id)[0];
|
|
return tmp;
|
|
}
|
|
|
|
getAll(role, authorizedFolders, format, lang) {
|
|
if (authorizedFolders !== null && authorizedFolders !== undefined) {
|
|
authorizedFolders = JSON.parse(authorizedFolders);
|
|
}
|
|
let tmp = realm.objects(this.schema);
|
|
if (role === 'USER') {
|
|
if (authorizedFolders.length > 0) {
|
|
tmp = tmp.filtered(
|
|
'needAuthorization = 0 OR ' +
|
|
authorizedFolders
|
|
.map(folder => ' id = "' + folder.id + '"')
|
|
.join(' OR '),
|
|
);
|
|
} else {
|
|
tmp = tmp.filtered(
|
|
'needAuthorization = 0'
|
|
);
|
|
}
|
|
}
|
|
if (format) {
|
|
return this._recursiveDir(tmp, lang);
|
|
}
|
|
return tmp;
|
|
}
|
|
|
|
clear() {
|
|
realm.write(() => {
|
|
realm.delete(this.getAll('SYNC', null, false));
|
|
});
|
|
}
|
|
|
|
_recursiveDir(list, lang, parent = null) {
|
|
let root = list.filter(e => e.parent === parent);
|
|
let tmp = [];
|
|
for (let i = 0; i < root.length; i++) {
|
|
let childs = this._recursiveDir(list, lang, root[i].id);
|
|
let name = JSON.parse(root[i].name);
|
|
tmp[i] = {};
|
|
tmp[i].id = root[i].id;
|
|
tmp[i].name = this.getI18nName(lang, name);
|
|
tmp[i].items = [];
|
|
for (let j = 0; j < childs.length; j++) {
|
|
childs[j].value = childs[j].id;
|
|
tmp[i].items.push(childs[j]);
|
|
}
|
|
if (!tmp[i].items.length) {
|
|
delete tmp[i].items;
|
|
}
|
|
}
|
|
return tmp;
|
|
}
|
|
|
|
getI18nName(lang, name) {
|
|
let tmp = undefined;
|
|
switch (lang) {
|
|
case "fr":
|
|
tmp = name.fr;
|
|
break;
|
|
case "en":
|
|
tmp = name.en;
|
|
break;
|
|
case "de":
|
|
tmp = name.de;
|
|
break;
|
|
case "es":
|
|
tmp = name.es;
|
|
break;
|
|
}
|
|
if (tmp === undefined) {
|
|
tmp = name.fr;
|
|
}
|
|
return tmp;
|
|
}
|
|
|
|
}
|
|
|
|
export default new DirectoriesModel();
|