carbon-components-angular
Version:
Next generation components
41 lines • 4.9 kB
JavaScript
import { fromEvent } from "rxjs";
import { debounceTime, map, filter } from "rxjs/operators";
/**
* returns an observable bound to keydown events that
* filters to a single element where the first letter of
* it's textContent matches the key pressed
*
* @param target element to watch
* @param elements elements to search
*/
export function watchFocusJump(target, elements) {
return fromEvent(target, "keydown")
.pipe(debounceTime(150), map((ev) => {
let el = elements.find((itemEl) => itemEl.textContent.trim().toLowerCase().startsWith(ev.key));
if (el) {
return el;
}
}), filter(el => !!el));
}
/** bundle of functions to aid in manipulating tree structures */
export const treetools = {
/** finds an item in a set of items and returns the item and path to the item as an array */
find: function (items, itemToFind, path = []) {
let found;
for (let i of items) {
if (i === itemToFind) {
path.push(i);
found = i;
}
if (i.items && !found) {
path.push(i);
found = this.find(i.items, itemToFind, path).found;
if (!found) {
path = [];
}
}
}
return { found, path };
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd250b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kcm9wZG93bi9kcm9wZG93bnRvb2xzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0Q7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBbUIsRUFBRSxRQUFRO0lBQzNELE9BQU8sU0FBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUM7U0FDakMsSUFBSSxDQUNKLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsR0FBRyxDQUFDLENBQUMsRUFBaUIsRUFBRSxFQUFFO1FBQ3pCLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNqQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3RCxJQUFJLEVBQUUsRUFBRTtZQUFFLE9BQU8sRUFBRSxDQUFDO1NBQUU7SUFDdkIsQ0FBQyxDQUFDLEVBQ0YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUNsQixDQUFDO0FBQ0osQ0FBQztBQUVELGlFQUFpRTtBQUNqRSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUc7SUFDeEIsNEZBQTRGO0lBQzVGLElBQUksRUFBRSxVQUFTLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxHQUFHLEVBQUU7UUFDMUMsSUFBSSxLQUFLLENBQUM7UUFDVixLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRTtZQUNwQixJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2IsS0FBSyxHQUFHLENBQUMsQ0FBQzthQUNWO1lBQ0QsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNiLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDbkQsSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO2lCQUFFO2FBQzFCO1NBQ0Q7UUFDRCxPQUFPLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBQyxDQUFDO0lBQ3RCLENBQUM7Q0FDRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbUV2ZW50IH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwLCBmaWx0ZXIgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuLyoqXG4gKiByZXR1cm5zIGFuIG9ic2VydmFibGUgYm91bmQgdG8ga2V5ZG93biBldmVudHMgdGhhdFxuICogZmlsdGVycyB0byBhIHNpbmdsZSBlbGVtZW50IHdoZXJlIHRoZSBmaXJzdCBsZXR0ZXIgb2ZcbiAqIGl0J3MgdGV4dENvbnRlbnQgbWF0Y2hlcyB0aGUga2V5IHByZXNzZWRcbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IGVsZW1lbnQgdG8gd2F0Y2hcbiAqIEBwYXJhbSBlbGVtZW50cyBlbGVtZW50cyB0byBzZWFyY2hcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhdGNoRm9jdXNKdW1wKHRhcmdldDogSFRNTEVsZW1lbnQsIGVsZW1lbnRzKTogT2JzZXJ2YWJsZTxIVE1MRWxlbWVudD4ge1xuXHRyZXR1cm4gZnJvbUV2ZW50KHRhcmdldCwgXCJrZXlkb3duXCIpXG5cdFx0LnBpcGUoXG5cdFx0XHRkZWJvdW5jZVRpbWUoMTUwKSxcblx0XHRcdG1hcCgoZXY6IEtleWJvYXJkRXZlbnQpID0+IHtcblx0XHRcdFx0bGV0IGVsID0gZWxlbWVudHMuZmluZCgoaXRlbUVsKSA9PlxuXHRcdFx0XHRcdGl0ZW1FbC50ZXh0Q29udGVudC50cmltKCkudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGV2LmtleSkpO1xuXHRcdFx0XHRpZiAoZWwpIHsgcmV0dXJuIGVsOyB9XG5cdFx0XHR9KSxcblx0XHRcdGZpbHRlcihlbCA9PiAhIWVsKVxuXHRcdCk7XG59XG5cbi8qKiBidW5kbGUgb2YgZnVuY3Rpb25zIHRvIGFpZCBpbiBtYW5pcHVsYXRpbmcgdHJlZSBzdHJ1Y3R1cmVzICovXG5leHBvcnQgY29uc3QgdHJlZXRvb2xzID0ge1xuXHQvKiogZmluZHMgYW4gaXRlbSBpbiBhIHNldCBvZiBpdGVtcyBhbmQgcmV0dXJucyB0aGUgaXRlbSBhbmQgcGF0aCB0byB0aGUgaXRlbSBhcyBhbiBhcnJheSAqL1xuXHRmaW5kOiBmdW5jdGlvbihpdGVtcywgaXRlbVRvRmluZCwgcGF0aCA9IFtdKSB7XG5cdFx0bGV0IGZvdW5kO1xuXHRcdGZvciAobGV0IGkgb2YgaXRlbXMpIHtcblx0XHRcdGlmIChpID09PSBpdGVtVG9GaW5kKSB7XG5cdFx0XHRcdHBhdGgucHVzaChpKTtcblx0XHRcdFx0Zm91bmQgPSBpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGkuaXRlbXMgJiYgIWZvdW5kKSB7XG5cdFx0XHRcdHBhdGgucHVzaChpKTtcblx0XHRcdFx0Zm91bmQgPSB0aGlzLmZpbmQoaS5pdGVtcywgaXRlbVRvRmluZCwgcGF0aCkuZm91bmQ7XG5cdFx0XHRcdGlmICghZm91bmQpIHsgcGF0aCA9IFtdOyB9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7Zm91bmQsIHBhdGh9O1xuXHR9XG59O1xuIl19