UNPKG

@antv/g6

Version:

graph visualization frame work

72 lines (66 loc) 1.61 kB
/** * @fileOverview filter graph item * filter will influence layout and visible * @author huangtonger@aliyun.com */ var Util = require('../util/'); var Mixin = {}; Mixin.INIT = '_initFilter'; Mixin.CFG = { /** * filter or filters * @type {array|function|undefined} */ filters: [] }; Mixin.AUGMENT = { _initFilter: function _initFilter() { var _this = this; var filters = this.get('filters'); if (Util.isFunction(filters)) { this.set('filters', [filters]); } this.on('afterchange', function (_ref) { var action = _ref.action; filters.length > 0 && action === 'changeData' && !_this.destroyed && _this.filter(); }); }, /** * add an filter * @param {object} filter filter * @return {object} filter */ addFilter: function addFilter(filter) { var filters = this.get('filters'); filters.push(filter); return filter; }, /** * remove filter * @param {object} filter item filter */ removeFilter: function removeFilter(filter) { var filters = this.get('filters'); this.set('filters', Util.filter(filters, filter)); }, /** * do filter */ filter: function filter() { var filters = this.get('filters'); var items = this.getItems(); var filteredItems = this.getItems(); filters.forEach(function (filter) { filteredItems = Util.filter(filteredItems, filter); }); items.forEach(function (item) { if (filteredItems.indexOf(item) === -1) { item.hide(); } else { item.show(); } }); this.draw(); } }; module.exports = Mixin;