| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import { createGraph, switchPlot } from "../core";
- import { months, monthsPretty, prettyModeNames } from "../staticData/constants";
- import { addConfigField, clearChildren, getData, prettyMonthName } from "../utils";
- import { Graph } from "./graph";
- export class TopCompanies implements Graph {
- id = "topCompanies";
- displayName = "Top Companies";
- configFieldIDs = ["metric", "month"];
- 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"], values: ["volume", "profit"]}, useURLParams ? this.urlParams.metric : undefined, updateFunc));
- configDiv?.appendChild(addConfigField("select", "month", "Month: ", {prettyValues: monthsPretty, "values": months}, useURLParams && this.urlParams.month ? this.urlParams.month : months[months.length - 1], updateFunc));
-
- }
- async generatePlot(configValues: any, plotContainerID: string)
- {
- // Get Data
- const companyData = await getData(this.loadedData, "company", configValues.month);
- const knownCompanies = await getData(this.loadedData, "knownCompanies");
-
- // Convert the data object into an array of [companyID, volume] pairs
- const volumeArray = Object.entries(companyData.totals).map(([companyID, info]) => ({
- companyID,
- volume: (info as any)[configValues.metric]
- }));
- // Sort the array by volume in descending order
- volumeArray.sort((a, b) => b.volume - a.volume);
- // Extract tickers and volumes into separate arrays
- const companyIDs = volumeArray.map(item => item.companyID);
- const volumes = volumeArray.map(item => item.volume);
- const companyNames = [] as any[];
- companyIDs.forEach(id => {
- companyNames.push(knownCompanies[id] || (id.slice(0, 5) + "..."));
- });
- // Create graph
- createGraph(plotContainerID, [{x: companyNames, y: volumes, 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: 100 // bottom
- }} : {}),
- title: {text: 'Top Companies (' + prettyModeNames[configValues.metric] + ') - ' + prettyMonthName(configValues.month)},
- xaxis: {
- title: {text: 'Ticker'},
- range: [-0.5, 29.5]
- },
- yaxis: {
- title: {text: prettyModeNames[configValues.metric] + ' [$/day]'},
- range: [0, null]
- }
- }, {})
- }
- }
|