@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
103 lines • 13.6 kB
JavaScript
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