public/lib/column-service.js (80 lines of code) (raw):

import angular from 'angular'; import moment from 'moment'; import { columnDefaults } from './column-defaults' import startTemplate from "components/content-list-item/content-list-item-start.html"; import endTemplate from "components/content-list-item/content-list-item-end.html"; angular.module('wfColumnService', []) .factory('wfColumnService', ['wfPreferencesService', function(wfPreferencesService) { class ColumnService { constructor() { var self = this; self.availableColums = columnDefaults; self.contentItemTemplate; self.preferencePromise = wfPreferencesService.getPreference('columnConfiguration').then(function resolve (data) { if (typeof data[0] !== "string") { return reject(); } else { self.columns = self.availableColums; self.columns.forEach((col) => { // set all to inactive col.active = false; }); data.forEach((colName) => { // activate preferences columns self.columns.some((availCol) => { if (availCol.name == colName) { availCol.active = true; // set active return true; } else { return false; } }); }); return self.columns; } }, reject); function reject () { self.columns = self.availableColums; self.setColumns(self.columns); return self.columns; } } getAvailableColumns() { return Promise.resolve(this.availableColums); } getColumns() { return this.columns ? Promise.resolve(this.columns) : this.preferencePromise; } getContentItemTemplate(refresh) { var self = this; if (!self.contentItemTemplate || refresh) { self.contentItemTemplate = self.getColumns().then((loadedColumns) => { loadedColumns = loadedColumns.filter((col) => { return col.active; }).map((col) => { return col.template; }); loadedColumns.unshift(startTemplate); loadedColumns.push(endTemplate); self.contentItemTemplate = loadedColumns.join(''); return self.contentItemTemplate; }); }; if (typeof self.contentItemTemplate.then === 'function') { return self.contentItemTemplate; } else { return Promise.resolve(self.contentItemTemplate); } } setColumns(columns) { this.columns = columns; var activeColumns = columns.filter((col) => { return col.active; }).map((col) => { return col.name; }); return wfPreferencesService.setPreference('columnConfiguration', activeColumns); } } return new ColumnService(); } ])