UNPKG

ngx-contextual-action-bar

Version:

ngx-contextual-action-bar is an Angular2+ implementation of the [Material Design Contextual Action Bar](https://material.io/components/app-bars-top#contextual-action-bar). The implementation makes it possible to change the action bar properties (i.e. titl

97 lines 12.3 kB
import { EventEmitter, Injectable } from '@angular/core'; import { ActionBarLayerModes } from './model/action-bar-layer.model'; import * as uuidv4 from 'uuid'; import { ActionBarLayerRegistration, ActionBarLayerToggleRegistration } from './layer-registration'; import { BehaviorSubject } from 'rxjs'; import { map } from 'rxjs/operators'; import * as i0 from "@angular/core"; const DEFAULT_LAYER_OPTIONS = { title: '', group: 'root', actions: [], mode: ActionBarLayerModes.fixed, prominent: false }; export class ContextualActionBarService { constructor() { /** * * Internal property, use at own risk. */ this._layers = new BehaviorSubject([]); this.buttonEmitter = new EventEmitter(); this.actionEmitter = new EventEmitter(); // public _customElementLoaded: EventEmitter<[string, ComponentType<any>]> = new EventEmitter<[string, ComponentType<any>]>(); this._customElement = new BehaviorSubject(undefined); } /** * Internal function used to retrieve most recent layer. * @param group - what group to target */ latest(group = 'root') { return this._layers.asObservable().pipe( //filter by group map(layers => layers.filter(layer => layer.group === group)), //get latest layer map(layers => layers[layers.length - 1])); } /** * Internal function * @param id id of layer to remove */ _removeLayer(id) { const { value } = this._layers; this._layers.next(value.filter(layer => layer.id !== id)); } /** * Internal function * @param layer - The layer to add */ _addLayer(layer) { const { value } = this._layers; this._layers.next([...value, layer]); } applyMissingProperties(layer) { const id = uuidv4.v4(); return Object.assign(Object.assign({}, DEFAULT_LAYER_OPTIONS), Object.assign({ id }, layer)); } validateLayer(layer) { return true; } /** * Function to register a new layer. Returns a registration * @param layerOptions */ register(layerOptions) { const layer = this.applyMissingProperties(layerOptions); if (this.validateLayer(layer)) { return new ActionBarLayerRegistration(this, layer); } else { throw new Error('Please validate that you have filled all required properties in your layer'); } } /** * Use at own risk, is set to be deprecated after next major version. * @param layer * @param toggleLayer */ registerToggle(layer, toggleLayer) { const _layer = this.applyMissingProperties(layer); const _toggleLayer = this.applyMissingProperties(toggleLayer); if (this.validateLayer(_layer) && this.validateLayer(_toggleLayer)) { return new ActionBarLayerToggleRegistration(this, _layer, _toggleLayer); } else { throw new Error('Please validate that you have filled all required properties in your layers'); } } } ContextualActionBarService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ContextualActionBarService_Factory() { return new ContextualActionBarService(); }, token: ContextualActionBarService, providedIn: "root" }); ContextualActionBarService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; ContextualActionBarService.ctorParameters = () => []; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWNvbnRleHR1YWwtYWN0aW9uLWJhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uL3Byb2plY3RzL25neC1jb250ZXh0dWFsLWFjdGlvbi1iYXIvc3JjLyIsInNvdXJjZXMiOlsibGliL25neC1jb250ZXh0dWFsLWFjdGlvbi1iYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQXVDLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFMUcsT0FBTyxLQUFLLE1BQU0sTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLDBCQUEwQixFQUFFLGdDQUFnQyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEcsT0FBTyxFQUFFLGVBQWUsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQXdCLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUczRCxNQUFNLHFCQUFxQixHQUFpQztJQUMxRCxLQUFLLEVBQUUsRUFBRTtJQUNULEtBQUssRUFBRSxNQUFNO0lBQ2IsT0FBTyxFQUFFLEVBQUU7SUFDWCxJQUFJLEVBQUUsbUJBQW1CLENBQUMsS0FBSztJQUMvQixTQUFTLEVBQUUsS0FBSztDQUNqQixDQUFBO0FBS0QsTUFBTSxPQUFPLDBCQUEwQjtJQUVyQztRQUlBOzs7V0FHRztRQUNhLFlBQU8sR0FBMkMsSUFBSSxlQUFlLENBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBa0MxRyxrQkFBYSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2pFLGtCQUFhLEdBQW1DLElBQUksWUFBWSxFQUFvQixDQUFDO1FBQzVGLDhIQUE4SDtRQUN2SCxtQkFBYyxHQUE4RCxJQUFJLGVBQWUsQ0FBMkMsU0FBUyxDQUFDLENBQUE7SUEzQ3ZKLENBQUM7SUFRTDs7O09BR0c7SUFDSSxNQUFNLENBQUMsUUFBZ0IsTUFBTTtRQUNsQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSTtRQUNyQyxpQkFBaUI7UUFDakIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDNUQsa0JBQWtCO1FBQ2xCLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBR3pDLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksWUFBWSxDQUFDLEVBQVU7UUFDNUIsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0ksU0FBUyxDQUFDLEtBQTBCO1FBQ3pDLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBUU8sc0JBQXNCLENBQUMsS0FBcUI7UUFDbEQsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sTUFBTSxDQUFDLE1BQU0sbUJBQUsscUJBQXFCLG1CQUFJLEVBQUUsSUFBSyxLQUFLLEVBQXlCLENBQUM7SUFDMUYsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFxQjtRQUN6QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxRQUFRLENBQUMsWUFBNEI7UUFDbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBQztZQUM1QixPQUFPLElBQUksMEJBQTBCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFBO1NBQ25EO2FBQU07WUFDTCxNQUFNLElBQUksS0FBSyxDQUFDLDRFQUE0RSxDQUFDLENBQUE7U0FDOUY7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxLQUFxQixFQUFFLFdBQTJCO1FBQy9ELE1BQU0sTUFBTSxHQUFTLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDOUQsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEVBQUM7WUFDakUsT0FBTyxJQUFJLGdDQUFnQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUE7U0FDeEU7YUFBTTtZQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsNkVBQTZFLENBQUMsQ0FBQztTQUNoRztJQUNILENBQUM7Ozs7WUF4RkYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGlvbkJhckxheWVyLCBBY3Rpb25CYXJMYXllck1vZGVsLCBBY3Rpb25CYXJMYXllck1vZGVzIH0gZnJvbSAnLi9tb2RlbC9hY3Rpb24tYmFyLWxheWVyLm1vZGVsJztcclxuXHJcbmltcG9ydCAqIGFzIHV1aWR2NCBmcm9tICd1dWlkJztcclxuaW1wb3J0IHsgQWN0aW9uQmFyTGF5ZXJSZWdpc3RyYXRpb24sIEFjdGlvbkJhckxheWVyVG9nZ2xlUmVnaXN0cmF0aW9uIH0gZnJvbSAnLi9sYXllci1yZWdpc3RyYXRpb24nO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5cclxuY29uc3QgREVGQVVMVF9MQVlFUl9PUFRJT05TOiBQYXJ0aWFsPEFjdGlvbkJhckxheWVyTW9kZWw+ID0ge1xyXG4gIHRpdGxlOiAnJyxcclxuICBncm91cDogJ3Jvb3QnLFxyXG4gIGFjdGlvbnM6IFtdLFxyXG4gIG1vZGU6IEFjdGlvbkJhckxheWVyTW9kZXMuZml4ZWQsXHJcbiAgcHJvbWluZW50OiBmYWxzZVxyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb250ZXh0dWFsQWN0aW9uQmFyU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgXHJcbiAgKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogSW50ZXJuYWwgcHJvcGVydHksIHVzZSBhdCBvd24gcmlzay5cclxuICAgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgX2xheWVyczogQmVoYXZpb3JTdWJqZWN0PEFjdGlvbkJhckxheWVyTW9kZWxbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFjdGlvbkJhckxheWVyTW9kZWxbXT4oW10pO1xyXG5cclxuICAvKipcclxuICAgKiBJbnRlcm5hbCBmdW5jdGlvbiB1c2VkIHRvIHJldHJpZXZlIG1vc3QgcmVjZW50IGxheWVyLlxyXG4gICAqIEBwYXJhbSBncm91cCAtIHdoYXQgZ3JvdXAgdG8gdGFyZ2V0XHJcbiAgICovXHJcbiAgcHVibGljIGxhdGVzdChncm91cDogc3RyaW5nID0gJ3Jvb3QnKTogT2JzZXJ2YWJsZTxBY3Rpb25CYXJMYXllck1vZGVsPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGF5ZXJzLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgIC8vZmlsdGVyIGJ5IGdyb3VwXHJcbiAgICAgIG1hcChsYXllcnMgPT4gbGF5ZXJzLmZpbHRlcihsYXllciA9PiBsYXllci5ncm91cCA9PT0gZ3JvdXApKSxcclxuICAgICAgLy9nZXQgbGF0ZXN0IGxheWVyXHJcbiAgICAgIG1hcChsYXllcnMgPT4gbGF5ZXJzW2xheWVycy5sZW5ndGggLSAxXSksXHJcbiAgICAgIC8vIGRvbnQgcmVhY3QgdG8gb3RoZXIgbGF5ZXJzIGNoYW5naW5nXHJcbiAgICAgIC8vIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhPy5pZCA9PSBiPy5pZClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbnRlcm5hbCBmdW5jdGlvblxyXG4gICAqIEBwYXJhbSBpZCBpZCBvZiBsYXllciB0byByZW1vdmVcclxuICAgKi9cclxuICBwdWJsaWMgX3JlbW92ZUxheWVyKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMuX2xheWVycztcclxuICAgIHRoaXMuX2xheWVycy5uZXh0KHZhbHVlLmZpbHRlcihsYXllciA9PiBsYXllci5pZCAhPT0gaWQpKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSW50ZXJuYWwgZnVuY3Rpb25cclxuICAgKiBAcGFyYW0gbGF5ZXIgLSBUaGUgbGF5ZXIgdG8gYWRkXHJcbiAgICovXHJcbiAgcHVibGljIF9hZGRMYXllcihsYXllcjogQWN0aW9uQmFyTGF5ZXJNb2RlbCk6IHZvaWQge1xyXG4gICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpcy5fbGF5ZXJzO1xyXG4gICAgdGhpcy5fbGF5ZXJzLm5leHQoWy4uLnZhbHVlLCBsYXllcl0pO1xyXG4gIH1cclxuICBcclxuICBwdWJsaWMgYnV0dG9uRW1pdHRlcjogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBwdWJsaWMgYWN0aW9uRW1pdHRlcjogRXZlbnRFbWl0dGVyPFtzdHJpbmcsIHN0cmluZ10+ID0gbmV3IEV2ZW50RW1pdHRlcjxbc3RyaW5nLCBzdHJpbmddPigpO1xyXG4gIC8vIHB1YmxpYyBfY3VzdG9tRWxlbWVudExvYWRlZDogRXZlbnRFbWl0dGVyPFtzdHJpbmcsIENvbXBvbmVudFR5cGU8YW55Pl0+ID0gbmV3IEV2ZW50RW1pdHRlcjxbc3RyaW5nLCBDb21wb25lbnRUeXBlPGFueT5dPigpO1xyXG4gIHB1YmxpYyBfY3VzdG9tRWxlbWVudDogQmVoYXZpb3JTdWJqZWN0PFtzdHJpbmcsIENvbXBvbmVudFR5cGU8YW55Pl0gfCB1bmRlZmluZWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxbc3RyaW5nLCBDb21wb25lbnRUeXBlPGFueT5dIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXHJcblxyXG5cclxuICBwcml2YXRlIGFwcGx5TWlzc2luZ1Byb3BlcnRpZXMobGF5ZXI6IEFjdGlvbkJhckxheWVyKTogQWN0aW9uQmFyTGF5ZXJNb2RlbCB7XHJcbiAgICBjb25zdCBpZCA9IHV1aWR2NC52NCgpO1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oey4uLkRFRkFVTFRfTEFZRVJfT1BUSU9OU30sIHtpZCwgLi4ubGF5ZXJ9KSBhcyBBY3Rpb25CYXJMYXllck1vZGVsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZUxheWVyKGxheWVyOiBBY3Rpb25CYXJMYXllcil7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIHRvIHJlZ2lzdGVyIGEgbmV3IGxheWVyLiBSZXR1cm5zIGEgcmVnaXN0cmF0aW9uXHJcbiAgICogQHBhcmFtIGxheWVyT3B0aW9ucyBcclxuICAgKi9cclxuICByZWdpc3RlcihsYXllck9wdGlvbnM6IEFjdGlvbkJhckxheWVyKTogQWN0aW9uQmFyTGF5ZXJSZWdpc3RyYXRpb24ge1xyXG4gICAgY29uc3QgbGF5ZXIgPSB0aGlzLmFwcGx5TWlzc2luZ1Byb3BlcnRpZXMobGF5ZXJPcHRpb25zKTtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRlTGF5ZXIobGF5ZXIpKXtcclxuICAgICAgcmV0dXJuIG5ldyBBY3Rpb25CYXJMYXllclJlZ2lzdHJhdGlvbih0aGlzLCBsYXllcilcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHZhbGlkYXRlIHRoYXQgeW91IGhhdmUgZmlsbGVkIGFsbCByZXF1aXJlZCBwcm9wZXJ0aWVzIGluIHlvdXIgbGF5ZXInKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXNlIGF0IG93biByaXNrLCBpcyBzZXQgdG8gYmUgZGVwcmVjYXRlZCBhZnRlciBuZXh0IG1ham9yIHZlcnNpb24uXHJcbiAgICogQHBhcmFtIGxheWVyIFxyXG4gICAqIEBwYXJhbSB0b2dnbGVMYXllciBcclxuICAgKi9cclxuICByZWdpc3RlclRvZ2dsZShsYXllcjogQWN0aW9uQmFyTGF5ZXIsIHRvZ2dsZUxheWVyOiBBY3Rpb25CYXJMYXllcik6IEFjdGlvbkJhckxheWVyVG9nZ2xlUmVnaXN0cmF0aW9uIHtcclxuICAgIGNvbnN0IF9sYXllciAgICAgICA9IHRoaXMuYXBwbHlNaXNzaW5nUHJvcGVydGllcyhsYXllcik7XHJcbiAgICBjb25zdCBfdG9nZ2xlTGF5ZXIgPSB0aGlzLmFwcGx5TWlzc2luZ1Byb3BlcnRpZXModG9nZ2xlTGF5ZXIpO1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVMYXllcihfbGF5ZXIpICYmIHRoaXMudmFsaWRhdGVMYXllcihfdG9nZ2xlTGF5ZXIpKXtcclxuICAgICAgcmV0dXJuIG5ldyBBY3Rpb25CYXJMYXllclRvZ2dsZVJlZ2lzdHJhdGlvbih0aGlzLCBfbGF5ZXIsIF90b2dnbGVMYXllcilcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHZhbGlkYXRlIHRoYXQgeW91IGhhdmUgZmlsbGVkIGFsbCByZXF1aXJlZCBwcm9wZXJ0aWVzIGluIHlvdXIgbGF5ZXJzJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=