2022-11-18 16:12:26 +00:00
|
|
|
import { GridItemData } from '@/types';
|
2022-04-15 15:53:31 +00:00
|
|
|
import { defineStore } from 'pinia';
|
|
|
|
|
|
|
|
export enum TradeLayout {
|
2022-11-18 16:12:26 +00:00
|
|
|
multiPane = 0,
|
|
|
|
openTrades = 1,
|
|
|
|
tradeHistory = 2,
|
|
|
|
tradeDetail = 3,
|
|
|
|
chartView = 4,
|
2022-04-15 15:53:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export enum DashboardLayout {
|
2022-11-18 16:12:26 +00:00
|
|
|
dailyChart = 0,
|
|
|
|
botComparison = 1,
|
|
|
|
allOpenTrades = 2,
|
|
|
|
cumChartChart = 3,
|
|
|
|
allClosedTrades = 4,
|
|
|
|
profitDistributionChart = 5,
|
|
|
|
tradesLogChart = 6,
|
2022-04-15 15:53:31 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Define default layouts
|
|
|
|
const DEFAULT_TRADING_LAYOUT: GridItemData[] = [
|
|
|
|
{ i: TradeLayout.multiPane, x: 0, y: 0, w: 3, h: 35 },
|
|
|
|
{ i: TradeLayout.chartView, x: 3, y: 0, w: 9, h: 14 },
|
|
|
|
{ i: TradeLayout.tradeDetail, x: 3, y: 19, w: 9, h: 6 },
|
|
|
|
{ i: TradeLayout.openTrades, x: 3, y: 14, w: 9, h: 5 },
|
|
|
|
{ i: TradeLayout.tradeHistory, x: 3, y: 25, w: 9, h: 10 },
|
|
|
|
];
|
|
|
|
|
|
|
|
// Currently only multiPane is visible
|
|
|
|
const DEFAULT_TRADING_LAYOUT_SM: GridItemData[] = [
|
|
|
|
{ i: TradeLayout.multiPane, x: 0, y: 0, w: 12, h: 10 },
|
|
|
|
{ i: TradeLayout.chartView, x: 0, y: 10, w: 12, h: 0 },
|
|
|
|
{ i: TradeLayout.tradeDetail, x: 0, y: 19, w: 12, h: 0 },
|
|
|
|
{ i: TradeLayout.openTrades, x: 0, y: 8, w: 12, h: 0 },
|
|
|
|
{ i: TradeLayout.tradeHistory, x: 0, y: 25, w: 12, h: 0 },
|
|
|
|
];
|
|
|
|
|
|
|
|
const DEFAULT_DASHBOARD_LAYOUT: GridItemData[] = [
|
|
|
|
{ i: DashboardLayout.botComparison, x: 0, y: 0, w: 8, h: 6 } /* Bot Comparison */,
|
|
|
|
{ i: DashboardLayout.dailyChart, x: 8, y: 0, w: 4, h: 6 },
|
|
|
|
{ i: DashboardLayout.allOpenTrades, x: 0, y: 6, w: 8, h: 6 },
|
|
|
|
{ i: DashboardLayout.cumChartChart, x: 8, y: 6, w: 4, h: 6 },
|
2022-06-19 15:42:24 +00:00
|
|
|
{ i: DashboardLayout.allClosedTrades, x: 0, y: 12, w: 8, h: 6 },
|
2022-06-21 17:51:47 +00:00
|
|
|
{ i: DashboardLayout.profitDistributionChart, x: 8, y: 12, w: 4, h: 6 },
|
2022-06-19 15:42:24 +00:00
|
|
|
{ i: DashboardLayout.tradesLogChart, x: 0, y: 18, w: 12, h: 4 },
|
2022-04-15 15:53:31 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
const DEFAULT_DASHBOARD_LAYOUT_SM: GridItemData[] = [
|
|
|
|
{ i: DashboardLayout.botComparison, x: 0, y: 0, w: 12, h: 6 } /* Bot Comparison */,
|
|
|
|
{ i: DashboardLayout.allOpenTrades, x: 0, y: 6, w: 12, h: 8 },
|
|
|
|
{ i: DashboardLayout.dailyChart, x: 0, y: 14, w: 12, h: 6 },
|
|
|
|
{ i: DashboardLayout.cumChartChart, x: 0, y: 20, w: 12, h: 6 },
|
2022-06-21 17:51:47 +00:00
|
|
|
{ i: DashboardLayout.profitDistributionChart, x: 0, y: 26, w: 12, h: 6 },
|
|
|
|
{ i: DashboardLayout.tradesLogChart, x: 0, y: 32, w: 12, h: 4 },
|
|
|
|
{ i: DashboardLayout.allClosedTrades, x: 0, y: 36, w: 12, h: 8 },
|
2022-04-15 15:53:31 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
const STORE_LAYOUTS = 'ftLayoutSettings';
|
|
|
|
|
|
|
|
function migrateLayoutSettings() {
|
|
|
|
const STORE_DASHBOARD_LAYOUT = 'ftDashboardLayout';
|
|
|
|
const STORE_TRADING_LAYOUT = 'ftTradingLayout';
|
|
|
|
const STORE_LAYOUT_LOCK = 'ftLayoutLocked';
|
|
|
|
|
|
|
|
// If new does not exist
|
2022-05-02 19:28:52 +00:00
|
|
|
if (localStorage.getItem(STORE_DASHBOARD_LAYOUT) !== null) {
|
2022-04-15 15:53:31 +00:00
|
|
|
console.log('Migrating dashboard settings');
|
|
|
|
const layoutLocked = localStorage.getItem(STORE_LAYOUT_LOCK);
|
|
|
|
const tradingLayout = localStorage.getItem(STORE_TRADING_LAYOUT);
|
|
|
|
const dashboardLayout = localStorage.getItem(STORE_DASHBOARD_LAYOUT);
|
|
|
|
|
|
|
|
const res = {
|
2022-04-15 17:25:23 +00:00
|
|
|
dashboardLayout,
|
2022-04-15 15:53:31 +00:00
|
|
|
tradingLayout,
|
|
|
|
layoutLocked,
|
|
|
|
};
|
|
|
|
localStorage.setItem(STORE_LAYOUTS, JSON.stringify(res));
|
|
|
|
}
|
|
|
|
localStorage.removeItem(STORE_LAYOUT_LOCK);
|
|
|
|
localStorage.removeItem(STORE_TRADING_LAYOUT);
|
|
|
|
localStorage.removeItem(STORE_DASHBOARD_LAYOUT);
|
|
|
|
}
|
|
|
|
migrateLayoutSettings();
|
|
|
|
/**
|
|
|
|
* Helper function finding a layout entry
|
|
|
|
* @param gridLayout Array of grid layouts used in this layout. Must be passed to GridLayout, too.
|
|
|
|
* @param name Name within the dashboard layout to find
|
|
|
|
*/
|
2022-11-18 16:12:26 +00:00
|
|
|
export function findGridLayout(gridLayout: GridItemData[], name: number): GridItemData {
|
2022-04-15 15:53:31 +00:00
|
|
|
let layout = gridLayout.find((value) => value.i === name);
|
|
|
|
if (!layout) {
|
|
|
|
layout = { i: name, x: 0, y: 0, w: 4, h: 6 };
|
|
|
|
}
|
|
|
|
return layout;
|
|
|
|
}
|
|
|
|
|
|
|
|
export const useLayoutStore = defineStore('layoutStore', {
|
|
|
|
state: () => {
|
|
|
|
return {
|
|
|
|
dashboardLayout: JSON.parse(JSON.stringify(DEFAULT_DASHBOARD_LAYOUT)),
|
|
|
|
tradingLayout: JSON.parse(JSON.stringify(DEFAULT_TRADING_LAYOUT)),
|
|
|
|
layoutLocked: true,
|
|
|
|
};
|
|
|
|
},
|
|
|
|
getters: {
|
|
|
|
getDashboardLayoutSm: () => [...DEFAULT_DASHBOARD_LAYOUT_SM],
|
|
|
|
getTradingLayoutSm: () => [...DEFAULT_TRADING_LAYOUT_SM],
|
|
|
|
},
|
|
|
|
actions: {
|
|
|
|
resetTradingLayout() {
|
|
|
|
this.tradingLayout = JSON.parse(JSON.stringify(DEFAULT_TRADING_LAYOUT));
|
|
|
|
},
|
|
|
|
resetDashboardLayout() {
|
|
|
|
this.dashboardLayout = JSON.parse(JSON.stringify(DEFAULT_DASHBOARD_LAYOUT));
|
|
|
|
},
|
|
|
|
},
|
|
|
|
persist: {
|
|
|
|
key: STORE_LAYOUTS,
|
2022-04-22 17:35:57 +00:00
|
|
|
afterRestore: (context) => {
|
2022-05-02 19:28:52 +00:00
|
|
|
if (
|
|
|
|
context.store.dashboardLayout === null ||
|
2022-12-04 12:35:05 +00:00
|
|
|
typeof context.store.dashboardLayout === 'string' ||
|
|
|
|
context.store.dashboardLayout.length === 0 ||
|
|
|
|
typeof context.store.dashboardLayout[0]['i'] === 'string' ||
|
|
|
|
context.store.dashboardLayout.length < DEFAULT_DASHBOARD_LAYOUT.length
|
2022-05-02 19:28:52 +00:00
|
|
|
) {
|
2022-12-04 12:35:05 +00:00
|
|
|
console.log('loading dashboard Layout from default.');
|
2022-04-22 17:35:57 +00:00
|
|
|
context.store.dashboardLayout = JSON.parse(JSON.stringify(DEFAULT_DASHBOARD_LAYOUT));
|
|
|
|
}
|
2022-12-04 12:35:05 +00:00
|
|
|
if (
|
|
|
|
context.store.tradingLayout === null ||
|
|
|
|
typeof context.store.tradingLayout === 'string' ||
|
|
|
|
context.store.tradingLayout.length === 0 ||
|
|
|
|
typeof context.store.tradingLayout[0]['i'] === 'string' ||
|
|
|
|
context.store.tradingLayout.length < DEFAULT_TRADING_LAYOUT.length
|
|
|
|
) {
|
|
|
|
console.log('loading trading Layout from default.');
|
2022-04-22 17:35:57 +00:00
|
|
|
context.store.tradingLayout = JSON.parse(JSON.stringify(DEFAULT_TRADING_LAYOUT));
|
|
|
|
}
|
|
|
|
},
|
2022-04-15 15:53:31 +00:00
|
|
|
},
|
|
|
|
});
|