open-consul/ui/packages/consul-ui/app/services/search.js

66 lines
2.1 KiB
JavaScript

import Service from '@ember/service';
import setHelpers from 'mnemonist/set';
import intention from 'consul-ui/search/predicates/intention';
import upstreamInstance from 'consul-ui/search/predicates/upstream-instance';
import serviceInstance from 'consul-ui/search/predicates/service-instance';
import acl from 'consul-ui/search/predicates/acl';
import service from 'consul-ui/search/predicates/service';
import node from 'consul-ui/search/predicates/node';
import kv from 'consul-ui/search/predicates/kv';
import token from 'consul-ui/search/predicates/token';
import role from 'consul-ui/search/predicates/role';
import policy from 'consul-ui/search/predicates/policy';
import nspace from 'consul-ui/search/predicates/nspace';
import filteredRole from 'consul-ui/search/filters/role';
import filteredPolicy from 'consul-ui/search/filters/policy';
// service instance
import nodeService from 'consul-ui/search/filters/node/service';
import serviceNode from 'consul-ui/search/filters/service/node';
import filterableFactory from 'consul-ui/utils/search/filterable';
const filterable = filterableFactory();
const searchables = {
serviceInstance: serviceNode(filterable),
nodeservice: nodeService(filterable),
role: filteredRole(filterable),
policy: filteredPolicy(filterable),
};
export const search = spec => {
let possible = Object.keys(spec);
return (term, options = {}) => {
const actual = [
...setHelpers.intersection(new Set(possible), new Set(options.properties || possible)),
];
return item => {
return (
typeof actual.find(key => {
return spec[key](item, term);
}) !== 'undefined'
);
};
};
};
const predicates = {
intention: search(intention),
service: search(service),
['service-instance']: search(serviceInstance),
['upstream-instance']: upstreamInstance(),
node: search(node),
kv: search(kv),
acl: search(acl),
token: search(token),
role: search(role),
policy: search(policy),
nspace: search(nspace),
};
export default class SearchService extends Service {
searchable(name) {
return searchables[name];
}
predicate(name) {
return predicates[name];
}
}