UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

103 lines 13.6 kB
import { Component, Injector, Input } from '@angular/core'; import { CapacityBase } from '../common/capacity-base.component'; import * as i0 from "@angular/core"; export class StackedBarComponent extends CapacityBase { constructor(injector) { super(injector); /** * Input binding for capacity bars data */ this.bars = []; } /** * The source name to use for logging */ get logSourceName() { return 'StackedBarComponent'; } ngOnInit() { this.addClasses(); this.addStyles(); } addClasses() { const color = this.bar.color ? this.bar.color : 'base'; if (this.bar.stripeAlpha) { this.addClass('sme-background-stripes-{0}-{1}'.format(color, this.bar.stripeAlpha)); } } getValue(bar) { return this.total ? (bar.value / this.total) * 100 : bar.value; } getWidth(bar) { const value = this.getValue(bar); return '{0}%'.format(value); } getColor(bar) { // if user specifies a color, use that color. Otherwise use the color scheme if (!MsftSme.isNullOrUndefined(this.bar.color)) { return this.bar.color; } // ensure both bars have the same color scheme - sum will be used to determine if the amount exceeds the red/yellow threshold let barTotal = 0; for (const tmpBar of this.bars) { barTotal += tmpBar.value; } const colorScheme = this.getColorScheme(barTotal); if (MsftSme.isNullOrUndefined(colorScheme[this.index])) { // eslint-disable-next-line max-len throw new Error('Color property must be set on HorizontalBar input if the StackedBarComponent is used outside of a StackedBarChartComponent. Or the color scheme value is not defined for this index.'); } else { return colorScheme[this.index]; } } addStyles() { this.setStyle('width', this.getWidth(this.bar)); // stripeAlpha indicates intent to use striped color instead of solid color if (!this.bar.stripeAlpha) { this.setStyle('background-color', this.getColor(this.bar)); } if (this.bar.right) { this.setStyle('right', this.getOffset(this.index, this.bar.right)); } else { this.setStyle('left', this.getOffset(this.index)); } } getOffset(index, rightSideBar) { let offset = 0; this.bars.forEach((bar, tmpIndex) => { const isMatchingSide = rightSideBar ? bar.right : !bar.right; if (tmpIndex < index && isMatchingSide) { const value = this.getValue(bar); offset += value; } }); return '{0}%'.format(offset); } /** * Gets the initial host classes to be applied to this element * Derived classes are always expected to call super.getInitialHostClasses() when overriding */ getInitialHostClasses() { return super.getInitialHostClasses().concat([ 'sme-position-flex-none' ]); } } /** @nocollapse */ StackedBarComponent.ɵfac = function StackedBarComponent_Factory(t) { return new (t || StackedBarComponent)(i0.ɵɵdirectiveInject(i0.Injector)); }; /** @nocollapse */ StackedBarComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: StackedBarComponent, selectors: [["sme-stacked-bar"]], inputs: { bar: "bar", index: "index", bars: "bars" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function StackedBarComponent_Template(rf, ctx) { }, encapsulation: 2 }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(StackedBarComponent, [{ type: Component, args: [{ selector: 'sme-stacked-bar', template: '' }] }], function () { return [{ type: i0.Injector }]; }, { bar: [{ type: Input }], index: [{ type: Input }], bars: [{ type: Input }] }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhY2tlZC1iYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvY29udHJvbHMvaG9yaXpvbnRhbC1iYXItY2hhcnQvc3RhY2tlZC1iYXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7O0FBT2pFLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxZQUFZO0lBd0JqRCxZQUFZLFFBQWtCO1FBQzFCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQU5wQjs7V0FFRztRQUNhLFNBQUksR0FBb0IsRUFBRSxDQUFDO0lBSTNDLENBQUM7SUF4QkQ7O09BRUc7SUFDSCxJQUFjLGFBQWE7UUFDdkIsT0FBTyxxQkFBcUIsQ0FBQztJQUNqQyxDQUFDO0lBcUJNLFFBQVE7UUFDWCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxVQUFVO1FBQ2IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFdkQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRTtZQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLGdDQUFnQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1NBQ3ZGO0lBQ0wsQ0FBQztJQUVPLFFBQVEsQ0FBQyxHQUFrQjtRQUMvQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FB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O1lBQ3hDLHdCQUF3QjtTQUMzQixDQUFDLENBQUM7SUFDUCxDQUFDOzt5R0EzR1EsbUJBQW1CO3FHQUFuQixtQkFBbUI7dUZBQW5CLG1CQUFtQjtjQUovQixTQUFTO2VBQUM7Z0JBQ1AsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IsUUFBUSxFQUFFLEVBQUU7YUFDZjsyREFhbUIsR0FBRztrQkFBbEIsS0FBSztZQUtVLEtBQUs7a0JBQXBCLEtBQUs7WUFLVSxJQUFJO2tCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDYXBhY2l0eUJhc2UgfSBmcm9tICcuLi9jb21tb24vY2FwYWNpdHktYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBIb3Jpem9udGFsQmFyIH0gZnJvbSAnLi9jdXN0b20taG9yaXpvbnRhbC1iYXItY2hhcnQtZGF0YS5pbnRlcmZhY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NtZS1zdGFja2VkLWJhcicsXHJcbiAgICB0ZW1wbGF0ZTogJydcclxufSlcclxuZXhwb3J0IGNsYXNzIFN0YWNrZWRCYXJDb21wb25lbnQgZXh0ZW5kcyBDYXBhY2l0eUJhc2UgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNvdXJjZSBuYW1lIHRvIHVzZSBmb3IgbG9nZ2luZ1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGxvZ1NvdXJjZU5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuICdTdGFja2VkQmFyQ29tcG9uZW50JztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqICBJbnB1dCBiaW5kaW5nIGZvciB0aGlzIGJhciBpbnN0YW5jZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgYmFyOiBIb3Jpem9udGFsQmFyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogIElucHV0IGJpbmRpbmcgZm9yIGluZGV4IG9mIHRoaXMgYmFyIGluc3RhbmNlIGluIHRoZSBIb3Jpem9udGFsQmFycyBhcnJheVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaW5kZXg6IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqICBJbnB1dCBiaW5kaW5nIGZvciBjYXBhY2l0eSBiYXJzIGRhdGFcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgcHVibGljIGJhcnM6IEhvcml6b250YWxCYXJbXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hZGRDbGFzc2VzKCk7XHJcbiAgICAgICAgdGhpcy5hZGRTdHlsZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkQ2xhc3NlcygpIHtcclxuICAgICAgICBjb25zdCBjb2xvciA9IHRoaXMuYmFyLmNvbG9yID8gdGhpcy5iYXIuY29sb3IgOiAnYmFzZSc7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmJhci5zdHJpcGVBbHBoYSkge1xyXG4gICAgICAgICAgICB0aGlzLmFkZENsYXNzKCdzbWUtYmFja2dyb3VuZC1zdHJpcGVzLXswfS17MX0nLmZvcm1hdChjb2xvciwgdGhpcy5iYXIuc3RyaXBlQWxwaGEpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZShiYXI6IEhvcml6b250YWxCYXIpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRvdGFsID8gKGJhci52YWx1ZSAvIHRoaXMudG90YWwpICogMTAwIDogYmFyLnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRXaWR0aChiYXI6IEhvcml6b250YWxCYXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZShiYXIpO1xyXG4gICAgICAgIHJldHVybiAnezB9JScuZm9ybWF0KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29sb3IoYmFyOiBIb3Jpem9udGFsQmFyKTogc3RyaW5nIHtcclxuICAgICAgICAvLyBpZiB1c2VyIHNwZWNpZmllcyBhIGNvbG9yLCB1c2UgdGhhdCBjb2xvci4gT3RoZXJ3aXNlIHVzZSB0aGUgY29sb3Igc2NoZW1lXHJcbiAgICAgICAgaWYgKCFNc2Z0U21lLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuYmFyLmNvbG9yKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5iYXIuY29sb3I7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBlbnN1cmUgYm90aCBiYXJzIGhhdmUgdGhlIHNhbWUgY29sb3Igc2NoZW1lIC0gc3VtIHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGFtb3VudCBleGNlZWRzIHRoZSByZWQveWVsbG93IHRocmVzaG9sZFxyXG4gICAgICAgIGxldCBiYXJUb3RhbCA9IDA7XHJcbiAgICAgICAgZm9yIChjb25zdCB0bXBCYXIgb2YgdGhpcy5iYXJzKSB7XHJcbiAgICAgICAgICAgIGJhclRvdGFsICs9IHRtcEJhci52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29sb3JTY2hlbWUgPSB0aGlzLmdldENvbG9yU2NoZW1lKGJhclRvdGFsKTtcclxuXHJcbiAgICAgICAgaWYgKE1zZnRTbWUuaXNOdWxsT3JVbmRlZmluZWQoY29sb3JTY2hlbWVbdGhpcy5pbmRleF0pKSB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29sb3IgcHJvcGVydHkgbXVzdCBiZSBzZXQgb24gSG9yaXpvbnRhbEJhciBpbnB1dCBpZiB0aGUgU3RhY2tlZEJhckNvbXBvbmVudCBpcyB1c2VkIG91dHNpZGUgb2YgYSBTdGFja2VkQmFyQ2hhcnRDb21wb25lbnQuIE9yIHRoZSBjb2xvciBzY2hlbWUgdmFsdWUgaXMgbm90IGRlZmluZWQgZm9yIHRoaXMgaW5kZXguJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yU2NoZW1lW3RoaXMuaW5kZXhdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkU3R5bGVzKCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3R5bGUoJ3dpZHRoJywgdGhpcy5nZXRXaWR0aCh0aGlzLmJhcikpO1xyXG5cclxuICAgICAgICAvLyBzdHJpcGVBbHBoYSBpbmRpY2F0ZXMgaW50ZW50IHRvIHVzZSBzdHJpcGVkIGNvbG9yIGluc3RlYWQgb2Ygc29saWQgY29sb3JcclxuICAgICAgICBpZiAoIXRoaXMuYmFyLnN0cmlwZUFscGhhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3R5bGUoJ2JhY2tncm91bmQtY29sb3InLCB0aGlzLmdldENvbG9yKHRoaXMuYmFyKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5iYXIucmlnaHQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdHlsZSgncmlnaHQnLCB0aGlzLmdldE9mZnNldCh0aGlzLmluZGV4LCB0aGlzLmJhci5yaWdodCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3R5bGUoJ2xlZnQnLCB0aGlzLmdldE9mZnNldCh0aGlzLmluZGV4KSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRPZmZzZXQoaW5kZXg6IG51bWJlciwgcmlnaHRTaWRlQmFyPzogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuYmFycy5mb3JFYWNoKChiYXIsIHRtcEluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzTWF0Y2hpbmdTaWRlID0gcmlnaHRTaWRlQmFyID8gYmFyLnJpZ2h0IDogIWJhci5yaWdodDtcclxuICAgICAgICAgICAgaWYgKHRtcEluZGV4IDwgaW5kZXggJiYgaXNNYXRjaGluZ1NpZGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZShiYXIpO1xyXG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuICd7MH0lJy5mb3JtYXQob2Zmc2V0KTtcclxuICAgIH1cclxuXHJcbiAgICAgICAgLyoqXHJcbiAgICAgKiBHZXRzIHRoZSBpbml0aWFsIGhvc3QgY2xhc3NlcyB0byBiZSBhcHBsaWVkIHRvIHRoaXMgZWxlbWVudFxyXG4gICAgICogRGVyaXZlZCBjbGFzc2VzIGFyZSBhbHdheXMgZXhwZWN0ZWQgdG8gY2FsbCBzdXBlci5nZXRJbml0aWFsSG9zdENsYXNzZXMoKSB3aGVuIG92ZXJyaWRpbmdcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldEluaXRpYWxIb3N0Q2xhc3NlcygpIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0SW5pdGlhbEhvc3RDbGFzc2VzKCkuY29uY2F0KFtcclxuICAgICAgICAgICAgJ3NtZS1wb3NpdGlvbi1mbGV4LW5vbmUnXHJcbiAgICAgICAgXSk7XHJcbiAgICB9XHJcbn1cclxuIl19