| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- import { createGraph, switchPlot } from "../core";
- import { months, monthsPretty } from "../staticData/constants";
- import { addConfigField, clearChildren, getData, prettyMonthName } from "../utils";
- import { Graph } from "./graph";
- export class MatHistory implements Graph {
- id = "matHistory";
- displayName = "MAT History";
- configFieldIDs = ["metric", "ticker"];
- loadedData: any;
- urlParams: any;
- constructor(loadedData: any, urlParams: any)
- {
- this.loadedData = loadedData;
- this.urlParams = urlParams;
- }
- setConfigs(useURLParams?: boolean)
- {
- const updateFunc = function() {switchPlot();}
- const configDiv = document.getElementById("selectorSubtypes");
- if(configDiv)
- {
- clearChildren(configDiv);
- }
- configDiv?.appendChild(addConfigField("select", "metric", "Metric: ", {prettyValues: ["Volume", "Profit", "Price", "Produced", "Consumption", "Surplus"], values: ["volume", "profit", "price", "amount", "consumed", "surplus"]}, useURLParams ? this.urlParams.metric : undefined, updateFunc));
- configDiv?.appendChild(addConfigField("input", "ticker", "Ticker: ", undefined, useURLParams && this.urlParams.ticker ? this.urlParams.ticker : undefined, updateFunc));
-
- }
- async generatePlot(configValues: any, plotContainerID: string)
- {
- if(!configValues.ticker || configValues.ticker == ""){return;}
- // Get Data
- const totalTickerData = [];
- for(var i = 0; i < months.length; i++)
- {
- const monthData = await getData(this.loadedData, "prod", months[i]);
- totalTickerData.push(monthData[(configValues.ticker ?? "").toUpperCase()])
- }
-
- const tickerData = [] as number[]; // Data for the specific metric
- const validMonths = [] as string[]; // Months with data
- totalTickerData.forEach((data, i) => {
- if(!data){return;}
- validMonths.push(monthsPretty[i]);
- switch(configValues.metric)
- {
- case "volume":
- tickerData.push(data.volume);
- break;
- case "profit":
- tickerData.push(data.profit);
- break;
- case "price":
- tickerData.push(data.amount == 0 ? 0 : data.volume / data.amount);
- break;
- case "amount":
- tickerData.push(data.amount);
- break;
- case "consumed":
- tickerData.push(data.consumed);
- break;
- case "surplus":
- tickerData.push(data.amount - data.consumed);
- break;
- }
- });
- if(validMonths.length == 0){return;}
- const titles = {
- 'profit': 'Production Profit History of ',
- 'volume': 'Production Volume History of ',
- 'amount': 'Production Amount History of ',
- 'price': 'Price History of ',
- 'consumed': 'Consumption History of ',
- 'surplus': 'Surplus Production History of '
- } as any
- const yAxis = {
- 'profit': 'Daily Profit [$/day]',
- 'volume': 'Daily Volume [$/day]',
- 'amount': 'Daily Production [per day]',
- 'price': 'Price [$]',
- 'consumed': 'Daily Consumption [per day]',
- 'surplus': 'Daily Surplus [per day]'
- } as any
- // Create graph
- createGraph(plotContainerID, [{x: validMonths, y: tickerData, type: 'bar'}],
- {
- width: this.urlParams.hideOptions !== undefined ? undefined : 800,
- height: this.urlParams.hideOptions !== undefined ? undefined : 400,
- autosize: this.urlParams.hideOptions !== undefined,
- ...(this.urlParams.hideOptions !== undefined ? {margin: {
- l: 60, // left
- r: 10, // right
- t: 40, // top
- b: 60 // bottom
- }} : {}),
- title: {text: titles[configValues.metric] + (configValues.ticker ?? "").toUpperCase()},
- xaxis: {
- title: {text: 'Month'}
- },
- yaxis: {
- title: {text: yAxis[configValues.metric]}
- }
- }, {})
- }
- }
|