mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-10-29 13:32:08 +00:00
194 lines
4.6 KiB
TypeScript
Vendored
194 lines
4.6 KiB
TypeScript
Vendored
import { Icons as PlotlyIcons } from "plotly.js-dist-min";
|
|
import { ICONS } from "./Config";
|
|
import { useHotkeys } from "react-hotkeys-hook";
|
|
import { downloadCSV, downloadImage } from "../utils/utils";
|
|
|
|
export function hideModebar(hide: boolean = true) {
|
|
return new Promise((resolve) => {
|
|
if (!window.MODEBAR) {
|
|
window.MODEBAR = window.document.getElementsByClassName(
|
|
"modebar-container"
|
|
)[0] as HTMLElement;
|
|
window.MODEBAR.style.cssText = `${window.MODEBAR.style.cssText}; display:flex;`;
|
|
}
|
|
let includes_text = "display: none";
|
|
if (window.MODEBAR) {
|
|
if (window.MODEBAR.style.cssText.includes("display: none") && !hide) {
|
|
includes_text = "display: flex";
|
|
window.MODEBAR.style.cssText = `${window.MODEBAR.style.cssText}; display:flex;`;
|
|
} else {
|
|
window.MODEBAR.style.cssText = `${window.MODEBAR.style.cssText}; display:none;`;
|
|
}
|
|
resolve(true);
|
|
}
|
|
});
|
|
}
|
|
|
|
export function PlotConfig({
|
|
setModal,
|
|
changeTheme,
|
|
autoScaling,
|
|
Loading,
|
|
changeColor,
|
|
}: {
|
|
setModal: (modal: { name: string; data?: any }) => void;
|
|
changeTheme: (change: boolean) => void;
|
|
autoScaling: (change: boolean) => void;
|
|
Loading: (change: boolean) => void;
|
|
changeColor: (change: boolean) => void;
|
|
}) {
|
|
useHotkeys(
|
|
"ctrl+shift+t",
|
|
() => {
|
|
setModal({ name: "titleDialog" });
|
|
},
|
|
{ preventDefault: true }
|
|
);
|
|
useHotkeys(
|
|
"ctrl+t",
|
|
() => {
|
|
setModal({ name: "textDialog" });
|
|
},
|
|
{ preventDefault: true }
|
|
);
|
|
useHotkeys(
|
|
"ctrl+o",
|
|
() => {
|
|
setModal({ name: "overlayChart" });
|
|
},
|
|
{ preventDefault: true }
|
|
);
|
|
useHotkeys(
|
|
"ctrl+shift+h",
|
|
() => {
|
|
hideModebar();
|
|
},
|
|
{ preventDefault: true }
|
|
);
|
|
useHotkeys(
|
|
"ctrl+e",
|
|
() => {
|
|
changeColor(true);
|
|
},
|
|
{ preventDefault: true }
|
|
);
|
|
useHotkeys(
|
|
"ctrl+shift+s",
|
|
async () => {
|
|
setModal({ name: "downloadCsv" });
|
|
await downloadCSV(document.getElementById("plotlyChart") as any);
|
|
},
|
|
{ preventDefault: true }
|
|
);
|
|
useHotkeys(
|
|
"ctrl+s",
|
|
async () => {
|
|
hideModebar();
|
|
downloadImage("MainChart", hideModebar, Loading);
|
|
},
|
|
{ preventDefault: true }
|
|
);
|
|
useHotkeys(
|
|
"ctrl+w",
|
|
() => {
|
|
window.close();
|
|
},
|
|
{ preventDefault: true }
|
|
);
|
|
|
|
const CONFIG = {
|
|
plotGlPixelRatio: 1,
|
|
scrollZoom: true,
|
|
responsive: true,
|
|
displaylogo: false,
|
|
displayModeBar: true,
|
|
modeBarButtonsToRemove: ["lasso2d", "select2d", "downloadImage"],
|
|
modeBarButtons: [
|
|
[
|
|
{
|
|
name: "Download CSV (Ctrl+Shift+S)",
|
|
icon: ICONS.downloadCsv,
|
|
click: async function (gd: any) {
|
|
await downloadCSV(gd);
|
|
},
|
|
},
|
|
{
|
|
name: "Download Chart as Image (Ctrl+S)",
|
|
icon: ICONS.downloadImage,
|
|
click: async function () {
|
|
hideModebar();
|
|
await downloadImage("MainChart", hideModebar, Loading);
|
|
},
|
|
},
|
|
// {
|
|
// name: "Upload Image (Ctrl+U)",
|
|
// icon: Plotly.Icons.uploadImage,
|
|
// click: function (gd) {
|
|
// downloadImage();
|
|
// },
|
|
// },
|
|
],
|
|
[
|
|
{
|
|
name: "Edit Color (Ctrl+E)",
|
|
icon: ICONS.changeColor,
|
|
click: function () {
|
|
changeColor(true);
|
|
},
|
|
},
|
|
"drawline",
|
|
"drawopenpath",
|
|
"drawcircle",
|
|
"drawrect",
|
|
"eraseshape",
|
|
],
|
|
[
|
|
{
|
|
name: "Overlay chart from CSV (Ctrl+O)",
|
|
icon: ICONS.plotCsv,
|
|
click: function () {
|
|
setModal({ name: "overlayChart" });
|
|
},
|
|
},
|
|
{
|
|
name: "Add Text (Ctrl+T)",
|
|
icon: ICONS.addText,
|
|
click: function () {
|
|
setModal({ name: "textDialog", data: { text: "" } });
|
|
},
|
|
},
|
|
{
|
|
name: "Change Titles (Ctrl+Shift+T)",
|
|
icon: ICONS.changeTitle,
|
|
click: function () {
|
|
setModal({ name: "titleDialog" });
|
|
},
|
|
},
|
|
{
|
|
name: "Change Theme",
|
|
icon: ICONS.sunIcon,
|
|
click: function () {
|
|
changeTheme(true);
|
|
},
|
|
},
|
|
],
|
|
["hoverClosestCartesian", "hoverCompareCartesian", "toggleSpikelines"],
|
|
[
|
|
{
|
|
name: "Auto Scale (Ctrl+Shift+A)",
|
|
icon: PlotlyIcons.autoscale,
|
|
click: function () {
|
|
autoScaling(true);
|
|
},
|
|
},
|
|
"zoomIn2d",
|
|
"zoomOut2d",
|
|
"autoScale2d",
|
|
"zoom2d",
|
|
"pan2d",
|
|
],
|
|
],
|
|
};
|
|
return CONFIG;
|
|
}
|