UNPKG

universe

Version:

The fastest way to query and explore multivariate datasets

75 lines (67 loc) 1.87 kB
'use strict' var Promise = require('q') var _ = require('./lodash') module.exports = function(service) { return function clear(def) { // Clear a single or multiple column definitions if (def) { def = _.isArray(def) ? def : [def] } if (!def) { // Clear all of the column defenitions return Promise.all( _.map(service.columns, disposeColumn) ).then(function() { service.columns = [] return service }) } return Promise.all( _.map(def, function(d) { if (_.isObject(d)) { d = d.key } // Clear the column var column = _.remove(service.columns, function(c) { if (_.isArray(d)) { return !_.xor(c.key, d).length } if (c.key === d) { if (c.dynamicReference) { return false } return true } })[0] if (!column) { // console.info('Attempted to clear a column that is required for another query!', c) return } disposeColumn(column) }) ).then(function() { return service }) function disposeColumn(column) { var disposalActions = [] // Dispose the dimension if (column.removeListeners) { disposalActions = _.map(column.removeListeners, function(listener) { return Promise.resolve(listener()) }) } var filterKey = column.key if (column.complex === 'array') { filterKey = JSON.stringify(column.key) } if (column.complex === 'function') { filterKey = column.key.toString() } delete service.filters[filterKey] if (column.dimension) { disposalActions.push(Promise.resolve(column.dimension.dispose())) } return Promise.all(disposalActions) } } }