Add filters help
This commit is contained in:
1 parent
6eac4e45c0
commit
65bf4ddb2c
3 files changed
+46
-6
No files matched your search
@@ -20,7 +20,7 @@
|
|||||||
export default class Autocomplete {
|
export default class Autocomplete {
|
||||||
private callback: (
|
private callback: (
|
||||||
value: string,
|
value: string,
|
||||||
callback: (suggestions: string[]) => void
|
callback: (suggestions: { value: string; tip?: string }[]) => void
|
||||||
) => void;
|
) => void;
|
||||||
private element: HTMLInputElement;
|
private element: HTMLInputElement;
|
||||||
private hideTimeout: NodeJS.Timeout;
|
private hideTimeout: NodeJS.Timeout;
|
||||||
@@ -137,25 +137,26 @@ export default class Autocomplete {
|
|||||||
this.selection =
|
this.selection =
|
||||||
((this.selection % suggestions.length) + suggestions.length) %
|
((this.selection % suggestions.length) + suggestions.length) %
|
||||||
suggestions.length;
|
suggestions.length;
|
||||||
this.default = suggestions[this.selection];
|
this.default = suggestions[this.selection].value;
|
||||||
} else {
|
} else {
|
||||||
this.default = suggestions[0];
|
this.default = suggestions[0].value;
|
||||||
}
|
}
|
||||||
|
|
||||||
let selectedElement;
|
let selectedElement;
|
||||||
for (const [idx, suggestion] of suggestions.entries()) {
|
for (const [idx, suggestion] of suggestions.entries()) {
|
||||||
const e = document.createElement("div");
|
const e = document.createElement("div");
|
||||||
|
if (suggestion.tip) e.title = suggestion.tip;
|
||||||
e.classList.add("suggestion");
|
e.classList.add("suggestion");
|
||||||
if (idx === this.selection) {
|
if (idx === this.selection) {
|
||||||
e.classList.add("selected");
|
e.classList.add("selected");
|
||||||
selectedElement = e;
|
selectedElement = e;
|
||||||
}
|
}
|
||||||
|
|
||||||
const t = document.createTextNode(suggestion);
|
const t = document.createTextNode(suggestion.value);
|
||||||
e.appendChild(t);
|
e.appendChild(t);
|
||||||
e.addEventListener("mousedown", ev => {
|
e.addEventListener("mousedown", ev => {
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
el.value = suggestion;
|
el.value = suggestion.value;
|
||||||
if (this.element === el) this.update();
|
if (this.element === el) this.update();
|
||||||
});
|
});
|
||||||
this.container.appendChild(e);
|
this.container.appendChild(e);
|
||||||
|
|||||||
@@ -29,7 +29,14 @@ const getAutocomplete = memoize(resource => {
|
|||||||
const labels = smartQuery.getLabels(resource);
|
const labels = smartQuery.getLabels(resource);
|
||||||
const autocomplete = new Autocomplete("autocomplete", (txt, cb) => {
|
const autocomplete = new Autocomplete("autocomplete", (txt, cb) => {
|
||||||
txt = txt.toLowerCase();
|
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;
|
return autocomplete;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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 {
|
export function unpack(resource, label, value): Expression {
|
||||||
if (!resources[resource]) return null;
|
if (!resources[resource]) return null;
|
||||||
const type = resources[resource][label].type;
|
const type = resources[resource][label].type;
|
||||||
|
|||||||
Reference in new issue
Block a user