Skip to content

Commit f955c43

Browse files
committed
Details stats component
1 parent a187660 commit f955c43

File tree

5 files changed

+94
-1
lines changed

5 files changed

+94
-1
lines changed

src/components/WebsiteStats.vue

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,10 @@
4646
>
4747
</div>
4848
<div class="mt-20 ml-10 mr-10 by-days-chart">
49-
<ByDaysChart :data="tabInfoByDays!" />
49+
<by-days-chart :data="tabInfoByDays!" />
50+
</div>
51+
<div>
52+
<website-stats-details :details="tabInfoByDays!" />
5053
</div>
5154
</div>
5255
</div>
@@ -64,6 +67,7 @@ import { useI18n } from 'vue-i18n';
6467
import Favicon from './Favicon.vue';
6568
import NoDataByDays from './NoDataByDays.vue';
6669
import ByDaysChart from '../components/ByDaysChart.vue';
70+
import WebsiteStatsDetails from '../components/WebsiteStatsDetails.vue';
6771
import { openPage } from '../utils/open-page';
6872
import { computed, onMounted, ref } from 'vue';
6973
import { SettingsTab } from '../utils/enums';
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<template>
2+
<div class="container">
3+
<div class="block">
4+
<p class="title">Total time</p>
5+
<p class="value">
6+
{{ convertSummaryTimeToString(details.summaryTime) }}
7+
</p>
8+
</div>
9+
<div class="block">
10+
<p class="title">Total sessions</p>
11+
<p class="value">
12+
{{ details.sessions }}
13+
</p>
14+
</div>
15+
<div class="block">
16+
<p class="title">Average daily time</p>
17+
<p class="value">
18+
{{ convertSummaryTimeToString(details.averageTime) }}
19+
</p>
20+
</div>
21+
</div>
22+
</template>
23+
24+
<script lang="ts">
25+
export default {
26+
name: 'WebsiteStatsDetails',
27+
};
28+
</script>
29+
30+
<script lang="ts" setup>
31+
import { useI18n } from 'vue-i18n';
32+
import { TabListByDays } from '../dto/tabListSummary';
33+
import { convertSummaryTimeToString } from '../utils/converter';
34+
35+
defineProps<{
36+
details: TabListByDays;
37+
}>();
38+
39+
const { t } = useI18n();
40+
</script>
41+
42+
<style scoped>
43+
.title {
44+
font-weight: 600;
45+
font-size: 16px;
46+
}
47+
.container {
48+
display: flex;
49+
width: auto;
50+
}
51+
.block {
52+
padding: 10px;
53+
background-color: rgb(237 237 237);
54+
border-radius: 10px;
55+
margin-right: 30px;
56+
box-shadow: 12px 12px 2px 1px rgb(185 255 171);
57+
}
58+
.block p.title {
59+
font-size: 15px;
60+
color: grey;
61+
}
62+
.block p.value {
63+
margin: 5px;
64+
font-size: 20px;
65+
font-weight: 600;
66+
}
67+
</style>

src/compositions/useTabListByDays.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export async function useTabListByDays(
2626
days: [],
2727
averageTime: 0,
2828
summaryTime: 0,
29+
sessions: 0,
2930
};
3031

3132
unSortedTabsByDays.forEach(tab => {
@@ -40,6 +41,7 @@ export async function useTabListByDays(
4041
day: day.date,
4142
tabs: [],
4243
time: day.summary,
44+
sessions: day.counter,
4345
};
4446
dayTab.tabs.push({
4547
favicon: tab.favicon,
@@ -50,6 +52,7 @@ export async function useTabListByDays(
5052
daysTabs.push(dayTab);
5153
} else {
5254
dayTab.time += day.summary;
55+
dayTab.sessions += day.counter;
5356
dayTab.tabs.push({
5457
favicon: tab.favicon,
5558
url: tab.url,
@@ -77,11 +80,18 @@ export async function useTabListByDays(
7780
return a + b;
7881
});
7982

83+
const totalSessions = daysTabs
84+
.map(x => x.sessions)
85+
.reduce(function (a, b) {
86+
return a + b;
87+
});
88+
8089
const averageTime = Math.round(summaryTime / daysTabs.length);
8190

8291
return {
8392
days: daysTabs,
8493
summaryTime: summaryTime,
8594
averageTime: averageTime,
95+
sessions: totalSessions,
8696
};
8797
}

src/compositions/useTabStatsByDays.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export async function useTabStatsByDays(
2525
days: [],
2626
averageTime: 0,
2727
summaryTime: 0,
28+
sessions: 0,
2829
};
2930

3031
unSortedTabsByDays.forEach(tabDay => {
@@ -38,6 +39,7 @@ export async function useTabStatsByDays(
3839
day: tabDay.date,
3940
tabs: [],
4041
time: tabDay.summary,
42+
sessions: tabDay.counter,
4143
};
4244
dayTab.tabs.push({
4345
favicon: tab.favicon,
@@ -48,6 +50,7 @@ export async function useTabStatsByDays(
4850
daysTabs.push(dayTab);
4951
} else {
5052
dayTab.time += tabDay.summary;
53+
dayTab.sessions += tabDay.counter;
5154
dayTab.tabs.push({
5255
favicon: tab.favicon,
5356
url: tab.url,
@@ -74,11 +77,18 @@ export async function useTabStatsByDays(
7477
return a + b;
7578
});
7679

80+
const totalSessions = daysTabs
81+
.map(x => x.sessions)
82+
.reduce(function (a, b) {
83+
return a + b;
84+
});
85+
7786
const averageTime = Math.round(summaryTime / daysTabs.length);
7887

7988
return {
8089
days: daysTabs,
8190
summaryTime: summaryTime,
8291
averageTime: averageTime,
92+
sessions: totalSessions,
8393
};
8494
}

src/dto/tabListSummary.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,12 @@ export interface TabListByDays {
3333
days: DayTabs[];
3434
averageTime: number;
3535
summaryTime: number;
36+
sessions: number;
3637
}
3738

3839
export interface DayTabs {
3940
day: string;
4041
tabs: CurrentTabItem[];
4142
time: number;
43+
sessions: number;
4244
}

0 commit comments

Comments
 (0)