frequi_origin/src/views/Dashboard.vue

210 lines
6.1 KiB
Vue
Raw Normal View History

2020-08-17 19:16:27 +00:00
<template>
2020-08-29 09:38:43 +00:00
<GridLayout
class="h-100 w-100"
:row-height="50"
:layout="gridLayout"
2020-08-25 17:45:35 +00:00
:vertical-compact="false"
:margin="[5, 5]"
:responsive-layouts="responsiveGridLayouts"
:is-resizable="!isLayoutLocked"
:is-draggable="!isLayoutLocked"
:responsive="true"
:prevent-collision="true"
2022-01-01 16:22:32 +00:00
:cols="{ lg: 12, md: 12, sm: 12, xs: 4, xxs: 2 }"
@layout-updated="layoutUpdatedEvent"
@breakpoint-changed="breakpointChanged"
2020-08-29 09:38:43 +00:00
>
2020-08-18 05:05:40 +00:00
<GridItem
:i="gridLayoutDaily.i"
:x="gridLayoutDaily.x"
:y="gridLayoutDaily.y"
:w="gridLayoutDaily.w"
:h="gridLayoutDaily.h"
2020-08-31 15:47:26 +00:00
:min-w="3"
:min-h="4"
drag-allow-from=".drag-header"
2020-08-18 05:05:40 +00:00
>
2022-04-19 17:37:04 +00:00
<DraggableContainer :header="`Daily Profit ${botStore.botCount > 1 ? 'combined' : ''}`">
2021-09-18 17:45:26 +00:00
<DailyChart
v-if="botStore.allDailyStatsSelectedBots"
:daily-stats="botStore.allDailyStatsSelectedBots"
2021-09-18 17:45:26 +00:00
:show-title="false"
/>
2020-08-31 15:47:26 +00:00
</DraggableContainer>
2020-08-18 05:05:40 +00:00
</GridItem>
<GridItem
:i="gridLayoutBotComparison.i"
:x="gridLayoutBotComparison.x"
:y="gridLayoutBotComparison.y"
:w="gridLayoutBotComparison.w"
:h="gridLayoutBotComparison.h"
2020-08-31 15:47:26 +00:00
:min-w="3"
:min-h="4"
drag-allow-from=".drag-header"
2020-08-18 05:05:40 +00:00
>
<DraggableContainer header="Bot comparison">
<bot-comparison-list />
</DraggableContainer>
</GridItem>
<GridItem
:i="gridLayoutAllOpenTrades.i"
:x="gridLayoutAllOpenTrades.x"
:y="gridLayoutAllOpenTrades.y"
:w="gridLayoutAllOpenTrades.w"
:h="gridLayoutAllOpenTrades.h"
:min-w="3"
:min-h="4"
drag-allow-from=".drag-header"
>
<DraggableContainer header="Open Trades">
<trade-list
:active-trades="true"
:trades="botStore.allOpenTradesSelectedBots"
multi-bot-view
/>
2020-08-31 15:47:26 +00:00
</DraggableContainer>
2020-08-18 05:05:40 +00:00
</GridItem>
<GridItem
:i="gridLayoutCumChart.i"
:x="gridLayoutCumChart.x"
:y="gridLayoutCumChart.y"
:w="gridLayoutCumChart.w"
:h="gridLayoutCumChart.h"
2020-08-31 15:47:26 +00:00
:min-w="3"
:min-h="4"
drag-allow-from=".drag-header"
2020-08-18 05:05:40 +00:00
>
2020-08-31 15:47:26 +00:00
<DraggableContainer header="Cumulative Profit">
<CumProfitChart :trades="botStore.allTradesSelectedBots" :show-title="false" />
2020-08-31 15:47:26 +00:00
</DraggableContainer>
2020-08-18 05:05:40 +00:00
</GridItem>
2021-01-05 18:29:47 +00:00
<GridItem
:i="gridLayoutTradesLogChart.i"
:x="gridLayoutTradesLogChart.x"
:y="gridLayoutTradesLogChart.y"
:w="gridLayoutTradesLogChart.w"
:h="gridLayoutTradesLogChart.h"
:min-w="3"
:min-h="4"
drag-allow-from=".drag-header"
>
<DraggableContainer header="Trades Log">
<TradesLogChart :trades="botStore.allTradesSelectedBots" :show-title="false" />
2021-01-05 18:29:47 +00:00
</DraggableContainer>
</GridItem>
2020-08-18 05:05:40 +00:00
</GridLayout>
2020-08-17 19:16:27 +00:00
</template>
<script lang="ts">
2020-08-24 20:27:03 +00:00
import { formatPrice } from '@/shared/formatters';
2020-08-29 09:38:43 +00:00
import { GridLayout, GridItem, GridItemData } from 'vue-grid-layout';
2020-08-17 19:16:27 +00:00
import DailyChart from '@/components/charts/DailyChart.vue';
2020-08-24 17:28:46 +00:00
import CumProfitChart from '@/components/charts/CumProfitChart.vue';
2021-01-05 18:29:47 +00:00
import TradesLogChart from '@/components/charts/TradesLog.vue';
import BotComparisonList from '@/components/ftbot/BotComparisonList.vue';
import TradeList from '@/components/ftbot/TradeList.vue';
2020-08-31 15:47:26 +00:00
import DraggableContainer from '@/components/layout/DraggableContainer.vue';
2020-08-17 19:16:27 +00:00
import { defineComponent, ref, computed, onMounted } from '@vue/composition-api';
import { DashboardLayout, findGridLayout, useLayoutStore } from '@/stores/layout';
2022-04-19 17:37:04 +00:00
import { useBotStore } from '@/stores/ftbotwrapper';
2020-08-17 19:16:27 +00:00
export default defineComponent({
name: 'Dashboard',
2020-08-17 19:16:27 +00:00
components: {
2020-08-29 09:38:43 +00:00
GridLayout,
GridItem,
2020-08-17 19:16:27 +00:00
DailyChart,
2020-08-24 17:28:46 +00:00
CumProfitChart,
2021-01-05 18:29:47 +00:00
TradesLogChart,
BotComparisonList,
TradeList,
2020-08-31 15:47:26 +00:00
DraggableContainer,
2020-08-17 19:16:27 +00:00
},
setup() {
2022-04-19 17:37:04 +00:00
const botStore = useBotStore();
const layoutStore = useLayoutStore();
const currentBreakpoint = ref('');
const breakpointChanged = (newBreakpoint) => {
// // console.log('breakpoint:', newBreakpoint);
currentBreakpoint.value = newBreakpoint;
};
const isResizableLayout = computed(() =>
['', 'sm', 'md', 'lg', 'xl'].includes(currentBreakpoint.value),
);
const isLayoutLocked = computed(() => {
return layoutStore.layoutLocked || !isResizableLayout;
});
const gridLayout = computed((): GridItemData[] => {
if (isResizableLayout) {
return layoutStore.dashboardLayout;
}
return [...layoutStore.getDashboardLayoutSm];
});
const layoutUpdatedEvent = (newLayout) => {
if (isResizableLayout) {
console.log('newlayout', newLayout);
console.log('saving dashboard');
2022-04-15 17:25:23 +00:00
layoutStore.dashboardLayout = newLayout;
}
};
const gridLayoutDaily = computed((): GridItemData => {
return findGridLayout(gridLayout.value, DashboardLayout.dailyChart);
});
const gridLayoutBotComparison = computed((): GridItemData => {
return findGridLayout(gridLayout.value, DashboardLayout.botComparison);
});
2020-08-18 05:05:40 +00:00
const gridLayoutAllOpenTrades = computed((): GridItemData => {
return findGridLayout(gridLayout.value, DashboardLayout.allOpenTrades);
});
const gridLayoutCumChart = computed((): GridItemData => {
return findGridLayout(gridLayout.value, DashboardLayout.cumChartChart);
});
const gridLayoutTradesLogChart = computed((): GridItemData => {
return findGridLayout(gridLayout.value, DashboardLayout.tradesLogChart);
});
const responsiveGridLayouts = computed(() => {
return {
sm: layoutStore.getDashboardLayoutSm,
};
});
2022-04-22 18:02:50 +00:00
onMounted(async () => {
await botStore.allGetDaily({ timescale: 30 });
2022-05-12 17:25:01 +00:00
// botStore.activeBot.getTrades();
2022-04-19 17:37:04 +00:00
botStore.activeBot.getOpenTrades();
botStore.activeBot.getProfit();
});
2021-01-05 18:29:47 +00:00
return {
2022-04-19 17:37:04 +00:00
botStore,
formatPrice,
isLayoutLocked,
layoutUpdatedEvent,
breakpointChanged,
gridLayout,
gridLayoutDaily,
gridLayoutBotComparison,
gridLayoutAllOpenTrades,
gridLayoutCumChart,
gridLayoutTradesLogChart,
responsiveGridLayouts,
};
},
});
2020-08-17 19:16:27 +00:00
</script>
<style scoped></style>