11<template >
22 <div class =" line" >
3- <DatePicker v-model =" dateRange " selectionMode="range" :manualInput =" false " showIcon fluid :showOnFocus =" false " @update :modelValue =" fetchUserStats " />
3+ <DatePicker
4+ v-model =" dateRange "
5+ dateFormat="d M yy"
6+ selectionMode="range"
7+ :manualInput =" false "
8+ showIcon
9+ fluid
10+ :showOnFocus =" false "
11+ @update :modelValue =" fetchUserStats "
12+ />
413 <Select v-model =" selectedIndexer " :options =" selectableIndexers " filter optionLabel="name" placeholder="Select an indexer" @change =" fetchUserStats " />
514 </div >
15+ <div class =" wrapper-center" >
16+ <MultiSelect
17+ v-model =" selectedValues "
18+ :options =" displayableValues "
19+ @update :modelValue =" (val ) => emit (' selectedValuesUpdated' , val ) "
20+ filter
21+ display="chip"
22+ placeholder="Charts to display"
23+ />
24+ </div >
25+ <div class =" wrapper-center" style =" margin-top : 5px " >
26+ <Button label="Set as default" size="small" @click =" setDefaultForm " />
27+ </div >
628</template >
729<script lang="ts" setup>
8- import { getUserStats , type GetUserStatsQuery , type UserProfileVec } from ' @/services/api/userStatsService'
9- import { DatePicker , Select } from ' primevue'
30+ import { getUserStats , type GetUserStatsQuery , type UserProfileScrapedVec , type UserProfileVec } from ' @/services/api/userStatsService'
31+ import { DatePicker , Select , MultiSelect , Button } from ' primevue'
1032import { onMounted , ref } from ' vue'
11- import { startOfWeek , endOfWeek } from ' date-fns'
33+ import { startOfMonth , endOfMonth } from ' date-fns'
1234import { getIndexersEnriched , type IndexerEnriched } from ' @/services/api/indexerService'
1335import { showToast } from ' @/main'
1436
1537const emit = defineEmits <{
1638 gotResults: [UserProfileVec ]
39+ selectedValuesUpdated: [(keyof UserProfileScrapedVec )[]]
1740}>()
1841
42+ const displayableValues = ref <(keyof UserProfileScrapedVec )[]>([
43+ ' downloaded' ,
44+ ' uploaded' ,
45+ ' bonus_points' ,
46+ ' leeching' ,
47+ ' seeding' ,
48+ ' ratio' ,
49+ ' uploaded_torrents' ,
50+ ' snatched' ,
51+ ' invited' ,
52+ ' torrent_comments' ,
53+ ])
54+ const selectedValues = ref <(typeof displayableValues .value )[number ][]>([' uploaded' , ' downloaded' ])
1955const loading = ref (false )
2056const selectableIndexers = ref <IndexerEnriched []>([])
2157const selectedIndexer = ref <IndexerEnriched >()
@@ -28,7 +64,7 @@ const form = ref<GetUserStatsQuery>({
2864
2965const setPresetRange = () => {
3066 const today = new Date ()
31- dateRange .value = [startOfWeek (today ), endOfWeek (today )]
67+ dateRange .value = [startOfMonth (today ), endOfMonth (today )]
3268}
3369const fetchUserStats = async () => {
3470 if (selectedIndexer .value ) {
@@ -41,14 +77,30 @@ const fetchUserStats = async () => {
4177 .finally (() => (loading .value = false ))
4278 }
4379}
80+ const setDefaultForm = () => {
81+ localStorage .setItem (' defaultSelectedValues' , JSON .stringify (selectedValues .value ))
82+ localStorage .setItem (' defaultSelectedIndexer' , JSON .stringify (selectedIndexer .value ))
83+ showToast (' ' , ' Indexer and displayed values set as default' , ' success' , 3000 )
84+ }
4485onMounted (async () => {
4586 const indexers = await getIndexersEnriched (true )
4687 if (indexers .length === 0 ) {
4788 showToast (' ' , ' No indexer with data available. Set them up in the settings' , ' warn' , 4000 )
4889 return
4990 }
5091 selectableIndexers .value = indexers
51- selectedIndexer .value = selectableIndexers .value [0 ]
92+ // load default form if it exists
93+ const defaultSelectedValues = localStorage .getItem (' defaultSelectedValues' )
94+ if (defaultSelectedValues ) {
95+ selectedValues .value = JSON .parse (defaultSelectedValues )
96+ emit (' selectedValuesUpdated' , selectedValues .value )
97+ }
98+ const defaultSelectedIndexer = localStorage .getItem (' defaultSelectedIndexer' )
99+ if (defaultSelectedIndexer ) {
100+ selectedIndexer .value = JSON .parse (defaultSelectedIndexer )
101+ } else {
102+ selectedIndexer .value = selectableIndexers .value [0 ]
103+ }
52104 setPresetRange ()
53105 await fetchUserStats ()
54106})
0 commit comments