/** * Created by mm28969 on 1/27/17. */ import { barStackLayoutCreator, ScaleContainerTypeEnum, ScaleTypeEnum } from "../mmviz-layout/index"; import {BarComponentSvg} from "../mmviz-component-svg/index"; import {DetailsBehavior} from "../mmviz-behavior/index"; import { getBarPadding, OrientationEnum } from "../mmviz-common/index"; import {ChartBuilderSvg} from "./builder"; export class BarStackChartBuilderSvg extends ChartBuilderSvg { component: BarComponentSvg; padding: number; orientationEnum: OrientationEnum; constructor(selector: string) { super(selector); this.component = new BarComponentSvg(selector, ".bar-stacks"); this.detailsBehavior = new DetailsBehavior(selector, this.component.selector); this.orientationEnum = OrientationEnum.VERTICAL; } setPadding(padding: number){ this.padding = padding; return this; } setOrientation(orientation: OrientationEnum){ this.orientationEnum = orientation; return this; } setDataModel(dataModel){ super.setDataModel(dataModel); if(this.padding === undefined){ this.padding = getBarPadding(dataModel.categoryArray.length); } return this; } createView(){ super.createView(); this.chartView.addContentTypeClass("bar-content"); if (OrientationEnum.VERTICAL === this.orientationEnum) { this.chartView.addContentTypeClass("bar-vertical"); } else if (OrientationEnum.HORIZONTAL === this.orientationEnum) { this.chartView.addContentTypeClass("bar-horizontal"); } return this; } updateView(){ if(!this.chartView.isViewable){ return this; } let viewModel: any, layouter: Function, layoutExtender = barStackLayoutCreator(this.orientationEnum, this.colorScaleKey); super.updateView(); if (OrientationEnum.VERTICAL === this.orientationEnum) { this.layoutScale .xScaleSetup(ScaleTypeEnum.BAND) .yScaleSetup(ScaleTypeEnum.LINEAR) .xScale.padding(this.padding); } else if (OrientationEnum.HORIZONTAL === this.orientationEnum) { this.layoutScale .xScaleSetup(ScaleTypeEnum.LINEAR) .yScaleSetup(ScaleTypeEnum.BAND) .yScale.padding(this.padding); } super.mapColorScale(); layouter = layoutExtender(this.dataModel, this.layoutScale); this.displayAxies(); viewModel = layouter(); this.component.updateView(this.chartView.stage, viewModel); super.updateComponents(); return this; } resizeView(){ return this.updateView(); } }