frequi_origin/src/views/Dashboard.vue

128 lines
3.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"
2020-08-29 09:38:43 +00:00
@layout-updated="layoutUpdatedEvent"
>
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
>
2020-08-31 15:47:26 +00:00
<DraggableContainer header="Daily Profit">
<DailyChart v-if="dailyStats.data" :daily-stats="dailyStats" :show-title="false" />
</DraggableContainer>
2020-08-18 05:05:40 +00:00
</GridItem>
<GridItem
:i="gridLayoutHourly.i"
:x="gridLayoutHourly.x"
:y="gridLayoutHourly.y"
:w="gridLayoutHourly.w"
:h="gridLayoutHourly.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="Hourly Profit">
<HourlyChart :trades="closedTrades" :show-title="false" />
</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="closedTrades" :show-title="false" />
</DraggableContainer>
2020-08-18 05:05:40 +00:00
</GridItem>
</GridLayout>
2020-08-17 19:16:27 +00:00
</template>
<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';
import { namespace } from 'vuex-class';
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';
import HourlyChart from '@/components/charts/HourlyChart.vue';
2020-08-24 17:28:46 +00:00
import CumProfitChart from '@/components/charts/CumProfitChart.vue';
2020-08-31 15:47:26 +00:00
import DraggableContainer from '@/components/layout/DraggableContainer.vue';
2020-08-17 19:16:27 +00:00
2020-08-29 09:23:39 +00:00
import { Trade, DailyReturnValue } from '@/types';
2020-08-17 19:16:27 +00:00
const ftbot = namespace('ftbot');
2020-08-18 06:29:40 +00:00
const layoutNs = namespace('layout');
2020-08-17 19:16:27 +00:00
@Component({
components: {
2020-08-29 09:38:43 +00:00
GridLayout,
GridItem,
2020-08-17 19:16:27 +00:00
DailyChart,
HourlyChart,
2020-08-24 17:28:46 +00:00
CumProfitChart,
2020-08-31 15:47:26 +00:00
DraggableContainer,
2020-08-17 19:16:27 +00:00
},
})
2020-08-18 06:29:40 +00:00
export default class Dashboard extends Vue {
@ftbot.Getter closedTrades!: Trade[];
2020-08-17 19:16:27 +00:00
@ftbot.State dailyStats!: DailyReturnValue;
@ftbot.Action getDaily;
@ftbot.Action getTrades;
2020-08-18 06:29:40 +00:00
@layoutNs.Getter getDashboardLayout!: GridItemData[];
@layoutNs.Mutation setDashboardLayout;
get gridLayout() {
2020-08-18 06:29:40 +00:00
return this.getDashboardLayout;
}
2020-08-18 05:05:40 +00:00
findGridLayout(name: string): GridItemData {
let layout = this.getDashboardLayout.find((value) => value.i === name);
if (!layout) {
layout = { i: name, x: 0, y: 6, w: 4, h: 6 };
}
return layout;
}
get gridLayoutDaily(): GridItemData {
return this.findGridLayout('g-dailyChart');
}
get gridLayoutHourly(): GridItemData {
return this.findGridLayout('g-hourlyChart');
}
get gridLayoutCumChart(): GridItemData {
return this.findGridLayout('g-cumChartChart');
}
2020-08-17 19:16:27 +00:00
mounted() {
this.getDaily();
this.getTrades();
}
2020-08-29 09:38:43 +00:00
2020-08-18 06:29:40 +00:00
layoutUpdatedEvent(newLayout) {
this.setDashboardLayout(newLayout);
2020-08-29 09:38:43 +00:00
}
2020-08-17 19:16:27 +00:00
}
</script>
<style scoped></style>