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();