File size: 3,916 Bytes
ccefd0b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
//@ts-nocheck
import { useEffect, useState } from "react";
import Chart from "./components/Chart";
import { candlestickMockup } from "./data/mockup";
declare global {
[Exposed === Window, SecureContext];
interface Window {
json_data: any;
export_image: string;
save_image: boolean;
title: string;
Plotly: any;
MODEBAR: HTMLElement;
download_path: string;
pywry: any;
}
}
function App() {
const [json_data, setData] = useState(
process.env.NODE_ENV === "production" ? null : candlestickMockup,
);
const [options, setOptions] = useState({});
useEffect(() => {
if (process.env.NODE_ENV === "production") {
const interval = setInterval(() => {
if (window.json_data) {
const plotly_json = window.json_data;
console.log(plotly_json);
setData(plotly_json);
clearInterval(interval);
}
}, 100);
return () => clearInterval(interval);
}
}, []);
const transformData = (data: any) => {
if (!data) return null;
const globals = {
added_traces: [],
csv_yaxis_id: null,
cmd_src_idx: null,
cmd_idx: null,
cmd_src: "",
old_margin: null,
title: "",
};
const filename = data.layout?.title?.text
.replace(/ -/g, "")
.replace(/-/g, "")
.replace(/<b>|<\/b>/g, "")
.replace(/ /g, "_");
const date = new Date().toISOString().slice(0, 10).replace(/-/g, "");
const time = new Date().toISOString().slice(11, 19).replace(/:/g, "");
window.title = `openbb_${filename}_${date}_${time}`.replace(/_{2,}/g, "_");
if (data.layout.annotations !== undefined) {
data.layout.annotations.forEach(function (annotation) {
if (annotation.text !== undefined)
if (annotation.text[0] === "/") {
globals.cmd_src = annotation.text;
globals.cmd_idx = data.layout.annotations.indexOf(annotation);
annotation.text = "";
const margin = data.layout.margin;
globals.old_margin = { ...margin };
if (margin.t !== undefined && margin.t > 40) margin.t = 40;
if (data.cmd === "/equity/price/historical") margin.r -= 50;
}
});
}
// We add spaces to all trace names, due to Fira Code font width issues
// to make sure that the legend is not cut off
data.data.forEach(function (trace) {
if (trace.name !== undefined) {
trace.hoverlabel = {
namelength: -1,
};
}
});
const title = data.layout?.title?.text || "OpenBB Platform";
globals.title = title;
return {
data: data,
date: new Date(),
globals: globals,
cmd: data.command_location,
python_version: data.python_version,
pywry_version: data.pywry_version,
terminal_version: data.terminal_version,
theme: data.theme,
title,
};
};
const transformedData = transformData(json_data);
if (transformedData) {
return (
<Chart
json={transformedData.data}
date={transformedData.date}
cmd={transformedData.cmd}
title={transformedData.title}
globals={transformedData.globals}
theme={transformedData.theme}
/>
);
} else
return (
<div className="absolute inset-0 flex items-center justify-center z-[100]">
<svg
className="animate-spin h-20 w-20 text-white"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
>
<circle
className="opacity-25"
cx="12"
cy="12"
r="10"
stroke="currentColor"
strokeWidth="4"
/>
<path
className="opacity-75"
fill="currentColor"
d="M4 12a8 8 0 018-8v8z"
/>
</svg>
</div>
);
}
export default App;
|