Add filters help

This commit is contained in:
Shweelan Samson authored and Zaid Abdulla committed 2019-07-05 14:38:50 -07:00
1 parent 6eac4e45c0
commit 65bf4ddb2c
3 files changed
+46 -6

No files matched your search

+6 -5
View File
@@ -20,7 +20,7 @@
export default class Autocomplete {
private callback: (
value: string,
callback: (suggestions: string[]) => void
callback: (suggestions: { value: string; tip?: string }[]) => void
) => void;
private element: HTMLInputElement;
private hideTimeout: NodeJS.Timeout;
@@ -137,25 +137,26 @@ export default class Autocomplete {
this.selection =
((this.selection % suggestions.length) + suggestions.length) %
suggestions.length;
this.default = suggestions[this.selection];
this.default = suggestions[this.selection].value;
} else {
this.default = suggestions[0];
this.default = suggestions[0].value;
}
let selectedElement;
for (const [idx, suggestion] of suggestions.entries()) {
const e = document.createElement("div");
if (suggestion.tip) e.title = suggestion.tip;
e.classList.add("suggestion");
if (idx === this.selection) {
e.classList.add("selected");
selectedElement = e;
}
const t = document.createTextNode(suggestion);
const t = document.createTextNode(suggestion.value);
e.appendChild(t);
e.addEventListener("mousedown", ev => {
ev.preventDefault();
el.value = suggestion;
el.value = suggestion.value;
if (this.element === el) this.update();
});
this.container.appendChild(e);
+8 -1
View File
@@ -29,7 +29,14 @@ const getAutocomplete = memoize(resource => {
const labels = smartQuery.getLabels(resource);
const autocomplete = new Autocomplete("autocomplete", (txt, cb) => {
txt = txt.toLowerCase();
cb(labels.filter(s => s.toLowerCase().includes(txt)).map(s => `${s}: `));
cb(
labels
.filter(s => s.toLowerCase().includes(txt))
.map(s => ({
value: `${s}: `,
tip: smartQuery.getTip(resource, s)
}))
);
});
return autocomplete;
});
+32
View File
@@ -132,6 +132,38 @@ function queryMac(param, value): Expression {
];
}
export function getTip(resource, label): string {
let tip;
if (resources[resource] && resources[resource][label]) {
const param = resources[resource][label];
const types =
resource === "devices" ? param["type"] : param["type"].split(",");
const tips = [];
for (const type of types) {
switch (type.trim()) {
case "string":
tips.push("case insensitive string pattern");
break;
case "number":
tips.push("numeric value");
break;
case "timestamp":
tips.push(
"Unix timestamp or string in the form YYYY-MM-DDTHH:mm:ss.sssZ"
);
break;
case "mac":
tips.push("partial case insensitive MAC address");
break;
}
}
if (tips.length) tip = `${label}: ${tips.join(", ")}`;
}
return tip;
}
export function unpack(resource, label, value): Expression {
if (!resources[resource]) return null;
const type = resources[resource][label].type;