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
JavaScript
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=