UNPKG

@exalif/ngx-breadcrumbs

Version:

Angular 4+ breadcrumbs on top of native Angular router

62 lines 7.21 kB
import { Observable, of, from } from 'rxjs'; export class BreadcrumbsUtils { static stringFormat(rawTemplate, data) { const templateRegex = new RegExp('{{[\\s]*[a-zA-Z._]+?[\\s]*}}', 'g'); return rawTemplate.replace(templateRegex, (match) => { const keyRegex = new RegExp('([a-zA-Z._]+)', 'g'); const key = match.match(keyRegex); if (!key || !key.length) { return match; } const value = BreadcrumbsUtils.leaf(data, key[0]); if (!value) { return key[0]; } return value; }); } static wrapIntoObservable(value) { if (value instanceof Observable) { return value; } if (this.isPromise(value)) { return from(Promise.resolve(value)); } return of(value); } static isPromise(value) { return value && (typeof value.then === 'function'); } /** * Access object nested value by giving a path * * @param obj The object you want to access value from * @param path The value path. e.g: `bar.baz` * @example * const obj = { foo: { bar: 'Baz' } }; * const path = 'foo.bar'; * leaf(obj, path) // 'Baz' */ static leaf(obj, path) { const result = path.split('.').reduce((value, el) => value[el] || {}, obj); return BreadcrumbsUtils.isEmptyObject(result) ? null : result; } /** * checks whether an object is empty or not * * @param object object to extract values from * @returns boolean */ static isEmptyObject(obj) { if (typeof obj === 'object' && Object.prototype.toString.call(obj) === '[object Object]') { for (const key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { return false; } } return true; } return false; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYnMudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25neC1icmVhZGNydW1icy9zcmMvbGliL3V0aWxzL2JyZWFkY3J1bWJzLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1QyxNQUFNLE9BQWdCLGdCQUFnQjtJQUM3QixNQUFNLENBQUMsWUFBWSxDQUFDLFdBQW1CLEVBQUUsSUFBUztRQUN2RCxNQUFNLGFBQWEsR0FBRyxJQUFJLE1BQU0sQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV0RSxPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFbEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3ZCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFFRCxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWxELElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDZjtZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sTUFBTSxDQUFDLGtCQUFrQixDQUFJLEtBQXFDO1FBQ3ZFLElBQUksS0FBSyxZQUFZLFVBQVUsRUFBRTtZQUMvQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNyQztRQUVELE9BQU8sRUFBRSxDQUFDLEtBQVUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQVU7UUFDakMsT0FBTyxLQUFLLElBQUksQ0FBQyxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBUSxFQUFFLElBQVk7UUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRTNFLE9BQU8sZ0JBQWdCLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNoRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUc7UUFDN0IsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLGlCQUFpQixFQUFFO1lBQ3hGLEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFO2dCQUNyQixJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ2xELE9BQU8sS0FBSyxDQUFDO2lCQUNkO2FBQ0Y7WUFFRCxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgZnJvbSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQnJlYWRjcnVtYnNVdGlscyB7XG4gIHB1YmxpYyBzdGF0aWMgc3RyaW5nRm9ybWF0KHJhd1RlbXBsYXRlOiBzdHJpbmcsIGRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgdGVtcGxhdGVSZWdleCA9IG5ldyBSZWdFeHAoJ3t7W1xcXFxzXSpbYS16QS1aLl9dKz9bXFxcXHNdKn19JywgJ2cnKTtcblxuICAgIHJldHVybiByYXdUZW1wbGF0ZS5yZXBsYWNlKHRlbXBsYXRlUmVnZXgsIChtYXRjaCkgPT4ge1xuICAgICAgY29uc3Qga2V5UmVnZXggPSBuZXcgUmVnRXhwKCcoW2EtekEtWi5fXSspJywgJ2cnKTtcbiAgICAgIGNvbnN0IGtleSA9IG1hdGNoLm1hdGNoKGtleVJlZ2V4KTtcblxuICAgICAgaWYgKCFrZXkgfHwgIWtleS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2YWx1ZSA9IEJyZWFkY3J1bWJzVXRpbHMubGVhZihkYXRhLCBrZXlbMF0pO1xuXG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiBrZXlbMF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgd3JhcEludG9PYnNlcnZhYmxlPFQ+KHZhbHVlOiBUIHwgUHJvbWlzZTxUPiB8IE9ic2VydmFibGU8VD4pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNQcm9taXNlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZyb20oUHJvbWlzZS5yZXNvbHZlKHZhbHVlKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKHZhbHVlIGFzIFQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNQcm9taXNlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgKHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2Nlc3Mgb2JqZWN0IG5lc3RlZCB2YWx1ZSBieSBnaXZpbmcgYSBwYXRoXG4gICAqXG4gICAqIEBwYXJhbSBvYmogVGhlIG9iamVjdCB5b3Ugd2FudCB0byBhY2Nlc3MgdmFsdWUgZnJvbVxuICAgKiBAcGFyYW0gcGF0aCBUaGUgdmFsdWUgcGF0aC4gZS5nOiBgYmFyLmJhemBcbiAgICogQGV4YW1wbGVcbiAgICogICBjb25zdCBvYmogPSB7IGZvbzogeyBiYXI6ICdCYXonIH0gfTtcbiAgICogICBjb25zdCBwYXRoID0gJ2Zvby5iYXInO1xuICAgKiAgIGxlYWYob2JqLCBwYXRoKSAvLyAnQmF6J1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBsZWFmKG9iajogYW55LCBwYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXN1bHQgPSBwYXRoLnNwbGl0KCcuJykucmVkdWNlKCh2YWx1ZSwgZWwpID0+IHZhbHVlW2VsXSB8fCB7fSwgb2JqKTtcblxuICAgIHJldHVybiBCcmVhZGNydW1ic1V0aWxzLmlzRW1wdHlPYmplY3QocmVzdWx0KSA/IG51bGwgOiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogY2hlY2tzIHdoZXRoZXIgYW4gb2JqZWN0IGlzIGVtcHR5IG9yIG5vdFxuICAgKlxuICAgKiBAcGFyYW0gb2JqZWN0IG9iamVjdCB0byBleHRyYWN0IHZhbHVlcyBmcm9tXG4gICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNFbXB0eU9iamVjdChvYmopOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=