import {createCurrencyFormatter, createNumericalFormatter} from "../mmviz-data"; import {AxisLocationEnum} from "../mmviz-layout/index"; import {ScaleTypeEnum} from "../mmviz-layout/scale_container"; import {ChartWidthSizeEnum} from "./util"; import * as d3 from "d3"; export function createAxis(axisLocationEnum: AxisLocationEnum, scale, config: any = {}) : any { let axis; switch (axisLocationEnum) { case AxisLocationEnum.TOP: axis = d3.axisTop(scale); break; case AxisLocationEnum.RIGHT: axis = d3.axisRight(scale); break; case AxisLocationEnum.BOTTOM: axis = d3.axisBottom(scale); break; case AxisLocationEnum.LEFT: axis = d3.axisLeft(scale); break; default: break; } if(config){ if(config.ticks){ axis.ticks(config.ticks); } else if (config.tickValues){ axis.tickValues(config.tickValues); } if(config.tickSize){ axis.tickSize(config.tickSize); } if(config.tickPadding) { axis.tickPadding(config.tickPadding); } if(config.tickFormat){ axis.tickFormat(config.tickFormat); } } return axis; } export function getTimeAxisConfigX(chartWidthSize) : any { let config; switch(chartWidthSize){ case ChartWidthSizeEnum.SMALL: config = { ticks: 3, tickFormat: d3.timeFormat("%b %d") }; break; case ChartWidthSizeEnum.MEDIUM: config = { ticks: 3, tickFormat: d3.timeFormat("%b %d %Y") }; break; case ChartWidthSizeEnum.LARGE: config = { ticks: 3, tickFormat: d3.timeFormat("%B %d %Y") }; break; default: config = { ticks: 3, tickFormat: d3.timeFormat("%b %d") }; break; } return config; } export function getLinearAxisConfigX(chartWidthSize = ChartWidthSizeEnum.LARGE) : any { let config; switch(chartWidthSize){ case ChartWidthSizeEnum.SMALL: config = { ticks: 3, tickFormat: createNumericalFormatter(",.2s") }; break; case ChartWidthSizeEnum.MEDIUM: config = { ticks: 5, tickFormat: createNumericalFormatter(",.2s") }; break; case ChartWidthSizeEnum.LARGE: config = { ticks: 5, tickFormat: createNumericalFormatter(",.2r") }; break; default: config = { ticks: 3, tickFormat: createNumericalFormatter(",.2s") }; break; } return config; } export function getCurrencyAxisConfigX(chartWidthSize = ChartWidthSizeEnum.LARGE) : any { let config; switch(chartWidthSize){ case ChartWidthSizeEnum.SMALL: config = { ticks: 3, tickFormat: createCurrencyFormatter("$,.2s") }; break; case ChartWidthSizeEnum.MEDIUM: config = { ticks: 5, tickFormat: createCurrencyFormatter("$,.2s") }; break; case ChartWidthSizeEnum.LARGE: config = { ticks: 5, tickFormat: createCurrencyFormatter("$,.2r") }; break; default: config = { ticks: 3, tickFormat: createCurrencyFormatter("$,.2s") }; break; } return config; } export function getLinearAxisConfigY(chartWidthSize = ChartWidthSizeEnum.LARGE) : any { let config; switch(chartWidthSize){ case ChartWidthSizeEnum.SMALL: case ChartWidthSizeEnum.MEDIUM: config = { ticks: 5, tickFormat: createNumericalFormatter(",.2s") }; break; case ChartWidthSizeEnum.LARGE: config = { ticks: 5, tickFormat: createNumericalFormatter(",.2r") }; break; default: config = { ticks: 5, tickFormat: createNumericalFormatter(",.2s") }; break; } return config; } export function getCurrencyAxisConfigY(chartWidthSize = ChartWidthSizeEnum.LARGE) : any { let config; switch (chartWidthSize){ case ChartWidthSizeEnum.SMALL: case ChartWidthSizeEnum.MEDIUM: config = { ticks: 5, tickFormat: createCurrencyFormatter("$,.3s") }; break; case ChartWidthSizeEnum.LARGE: config = { ticks: 5, tickFormat: createCurrencyFormatter("$,.7r") }; break; default: config = { ticks: 5, tickFormat: createCurrencyFormatter("$,.3s") }; break; } return config; //todo: when d3-format is upgraded to the newest, change all the format to have ~ before s, like $,.3~s }