Skip to content

Commit a5789a4

Browse files
committed
Sorting by sessions and web usage
1 parent 41b7712 commit a5789a4

File tree

12 files changed

+70
-117
lines changed

12 files changed

+70
-117
lines changed

src/assets/css/main.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
:root {
22
--main-color: #6ebf5d;
33
--popup-header: #f3f3f3;
4-
--progress-bar: #6ebf5d;
4+
--progress-bar: #428bff;
55
}
66
::-webkit-scrollbar-track {
77
border-radius: 10px;

src/assets/icons/24-hours.svg

Lines changed: 0 additions & 34 deletions
This file was deleted.

src/assets/icons/pie-chart.svg

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/assets/icons/stats.svg

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/components/TabItem.vue

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<template>
22
<div class="tab-item">
3-
<Favicon :favicon="tab.favicon" />
3+
<Favicon :favicon="item.favicon" />
44
<div class="ml-10 flex-grow-2">
55
<div class="first-block">
6-
<p class="url">{{ tab.url }}</p>
6+
<p class="url">{{ item.url }}</p>
77
<p class="text-right time">{{ summaryTimeForTab }}</p>
88
</div>
99
<div class="second-block">
@@ -26,29 +26,29 @@ export default {
2626

2727
<script lang="ts" setup>
2828
import { computed } from 'vue';
29-
import { Tab } from '../entity/tab';
30-
import { todayLocalDate } from '../utils/today';
3129
import Favicon from './Favicon.vue';
3230
import { convertSummaryTimeToString } from '../utils/converter';
3331
import { getPercentage } from '../utils/common';
32+
import { CurrentTabItem } from '../dto/currentTabItem';
3433
3534
const props = defineProps<{
36-
tab: Tab;
37-
summaryTime: number;
35+
item: CurrentTabItem;
3836
}>();
3937
40-
const currentDayValue = props.tab.days.find(x => x.date == todayLocalDate())!;
41-
4238
const sessions = computed(() => {
43-
if (currentDayValue.counter == 0) return '0 visits';
44-
if (currentDayValue.counter > 1) return `${currentDayValue.counter} visits`;
45-
if (currentDayValue.counter == 1) return `${currentDayValue.counter} visit`;
39+
if (props.item.sessions == 0) return '0 session';
40+
if (props.item.sessions > 1) return `${props.item.sessions} sessions`;
41+
if (props.item.sessions == 1) return `${props.item.sessions} session`;
4642
});
4743
48-
const summaryTimeForTab = convertSummaryTimeToString(currentDayValue?.summary);
49-
const percent = getPercentage(currentDayValue?.summary, props.summaryTime);
44+
const summaryTimeForTab = computed(() =>
45+
convertSummaryTimeToString(props.item.summaryTimeForCurrent),
46+
);
47+
const percent = computed(() =>
48+
getPercentage(props.item.summaryTimeForCurrent, props.item.summaryTime),
49+
);
5050
51-
const styleForProgressBar = computed(() => `width: ${percent}%`);
51+
const styleForProgressBar = computed(() => `width: ${percent.value}%`);
5252
</script>
5353

5454
<style scoped>

src/components/TabItemHeader.vue

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
</div>
77
<div class="sorted-block">
88
<span class="mr-5">Sorting by</span>
9-
<select class="p-5" @change="sortingBy()">
10-
<option>Usage Time</option>
11-
<option>Sessions</option>
9+
<select class="p-5" v-model="sortingBySelected" @change="sortingBy()">
10+
<option :value="SortingBy.UsageTime">Usage Time</option>
11+
<option :value="SortingBy.Sessions">Sessions</option>
1212
</select>
1313
</div>
1414
</div>
@@ -21,7 +21,7 @@ export default {
2121
</script>
2222

2323
<script lang="ts" setup>
24-
import { computed } from 'vue';
24+
import { computed, onMounted, ref } from 'vue';
2525
import { convertSummaryTimeToString } from '../utils/converter';
2626
import { SortingBy, TypeOfList } from '../utils/enums';
2727
@@ -32,6 +32,8 @@ const props = defineProps<{
3232
firstDay: Date;
3333
}>();
3434
35+
const sortingBySelected = ref<SortingBy>();
36+
3537
const emit = defineEmits<{
3638
(event: 'sortingBy', sortingBy: SortingBy): void;
3739
}>();
@@ -41,10 +43,14 @@ const title = computed(() => {
4143
if (props.listType == TypeOfList.All) return `Aggregate data since ${props.firstDay} `;
4244
});
4345
46+
onMounted(async () => {
47+
sortingBySelected.value = SortingBy.UsageTime;
48+
});
49+
4450
const summaryTimeString = computed(() => convertSummaryTimeToString(props.summaryTime));
4551
46-
function sortingBy(value) {
47-
emit('sortingBy', value);
52+
function sortingBy() {
53+
emit('sortingBy', sortingBySelected.value!);
4854
}
4955
</script>
5056

src/components/TabList.vue

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
:firstDay="firstDay"
1010
@sortingBy="sorting"
1111
/>
12-
<TabItem v-for="(tab, i) of tabs" :key="i" :tab="tab" :summaryTime="summaryTime" />
12+
13+
<TabItem v-for="(tab, i) of tabs" :key="i" :item="getItem(tab)" />
1314
</div>
1415
</template>
1516

@@ -29,6 +30,8 @@ import { Tab } from '../entity/tab';
2930
import { SortingBy, TypeOfList } from '../utils/enums';
3031
import { useTodayTabListSummary } from '../compositions/today-tab-list-summary';
3132
import { useAllTabListSummary } from '../compositions/all-tab-list-summary';
33+
import { CurrentTabItem } from '../dto/currentTabItem';
34+
import { todayLocalDate } from '../utils/today';
3235
3336
const props = defineProps<{
3437
type: TypeOfList;
@@ -51,7 +54,7 @@ async function loadList(sortingBy: SortingBy) {
5154
const repo = await injectTabsRepository();
5255
let tabSummary = null;
5356
if (props.type == TypeOfList.Today) tabSummary = await useTodayTabListSummary(sortingBy);
54-
if (props.type == TypeOfList.Today) tabSummary = await useAllTabListSummary(sortingBy);
57+
if (props.type == TypeOfList.All) tabSummary = await useAllTabListSummary(sortingBy);
5558
5659
if (tabSummary != null) {
5760
tabs.value = tabSummary.tabs;
@@ -61,18 +64,34 @@ async function loadList(sortingBy: SortingBy) {
6164
}
6265
}
6366
64-
function sorting(sortingBy: SortingBy) {
67+
async function sorting(sortingBy: SortingBy) {
6568
switch (sortingBy) {
66-
case SortingBy.WebUsage:
67-
loadList(SortingBy.WebUsage);
69+
case SortingBy.UsageTime:
70+
await loadList(SortingBy.UsageTime);
6871
break;
6972
case SortingBy.Sessions:
70-
loadList(SortingBy.Sessions);
73+
await loadList(SortingBy.Sessions);
7174
break;
7275
}
7376
}
7477
78+
function getItem(tab: Tab): CurrentTabItem {
79+
return {
80+
summaryTime: summaryTime.value!,
81+
favicon: tab.favicon,
82+
url: tab.url,
83+
sessions:
84+
props.type == TypeOfList.Today
85+
? tab.days.find(day => day.date === todayLocalDate())!.counter
86+
: tab.counter,
87+
summaryTimeForCurrent:
88+
props.type == TypeOfList.Today
89+
? tab.days.find(day => day.date === todayLocalDate())!.summary
90+
: tab.summaryTime,
91+
};
92+
}
93+
7594
onMounted(async () => {
76-
loadList(SortingBy.WebUsage);
95+
await loadList(SortingBy.UsageTime);
7796
});
7897
</script>

src/compositions/all-tab-list-summary.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
import { TabListSummary } from '../dto/tabListSummary';
12
import { Tab } from '../entity/tab';
23
import { injectTabsRepository } from '../repository/inject-tabs-repository';
3-
import { TabListSummary } from '../utils/tabListSummary';
4+
import { SortingBy } from '../utils/enums';
45

5-
export async function useAllTabListSummary(): Promise<TabListSummary> {
6+
export async function useAllTabListSummary(sortingBy: SortingBy): Promise<TabListSummary> {
67
const repo = await injectTabsRepository();
78
const unSortedTabs = repo.getTodayTabs();
89
let tabs: Tab[] = [];

src/compositions/today-tab-list-summary.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1+
import { TabListSummary } from '../dto/tabListSummary';
12
import { Tab } from '../entity/tab';
23
import { injectTabsRepository } from '../repository/inject-tabs-repository';
34
import { SortingBy } from '../utils/enums';
4-
import { TabListSummary } from '../utils/tabListSummary';
55
import { todayLocalDate } from '../utils/today';
66

77
export async function useTodayTabListSummary(sortingBy: SortingBy): Promise<TabListSummary> {
@@ -18,13 +18,13 @@ export async function useTodayTabListSummary(sortingBy: SortingBy): Promise<TabL
1818
});
1919

2020
const summaryTimeList = tabs?.map(function (tab) {
21-
return sortingBy == SortingBy.UsageTime
22-
? tab.days.find(day => day.date === todayLocalDate())!.summary
23-
: tab.days.find(day => day.date === todayLocalDate())!.counter;
21+
return tab.days.find(day => day.date === todayLocalDate())!.summary;
2422
});
23+
2524
const siteList = tabs?.map(function (tab) {
2625
return tab.url;
2726
});
27+
2828
const timeForChart = summaryTimeList?.slice(0, 10);
2929
const sitesForChart = siteList?.slice(0, 10);
3030

src/dto/currentTabItem.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export interface CurrentTabItem {
2+
url: string;
3+
favicon: string | undefined;
4+
summaryTimeForCurrent: number;
5+
summaryTime: number;
6+
sessions: number;
7+
}

0 commit comments

Comments
 (0)