tangled
alpha
login
or
join now
mackuba.eu
/
skythread
14
fork
atom
Thread viewer for Bluesky
14
fork
atom
overview
issues
pulls
pipelines
small fix on posting stats page
mackuba.eu
3 months ago
89ea3b6d
5e78753d
+28
-21
2 changed files
expand all
collapse all
unified
split
src
components
PostingStatsTable.svelte
pages
PostingStatsPage.svelte
+3
-1
src/components/PostingStatsTable.svelte
···
1
1
<script lang="ts">
2
2
import { type PostingStatsResult } from "../services/posting_stats";
3
3
4
4
-
interface Props extends PostingStatsResult {
4
4
+
export interface TableOptions {
5
5
showReposts?: boolean,
6
6
showPercentages?: boolean,
7
7
showTotal?: boolean
8
8
};
9
9
+
10
10
+
type Props = PostingStatsResult & TableOptions;
9
11
10
12
let { users, sums, daysBack, showReposts = true, showPercentages = true, showTotal = true }: Props = $props();
11
13
+25
-20
src/pages/PostingStatsPage.svelte
···
1
1
<script lang="ts">
2
2
import UserAutocomplete, { type AutocompleteUser } from '../components/UserAutocomplete.svelte';
3
3
-
import PostingStatsTable from '../components/PostingStatsTable.svelte';
3
3
+
import PostingStatsTable, { type TableOptions } from '../components/PostingStatsTable.svelte';
4
4
import { accountAPI } from '../api.js';
5
5
import { PostingStats, type PostingStatsResult } from '../services/posting_stats.js';
6
6
import { numberOfDays } from '../utils.js';
···
10
10
{ id: 'list', title: 'List feed' },
11
11
{ id: 'users', title: 'Selected users' },
12
12
{ id: 'you', title: 'Your profile' }
13
13
-
]
13
13
+
] as const;
14
14
15
15
let lists: json[] = $state([]);
16
16
17
17
let timeRangeDays = $state(7);
18
18
-
let selectedTab = $state(tabs[0].id);
18
18
+
let selectedTab: typeof tabs[number]['id'] = $state(tabs[0].id);
19
19
let selectedUsers: AutocompleteUser[] = $state([]);
20
20
let selectedList: string | undefined = $state();
21
21
···
24
24
let progress: number | undefined = $state();
25
25
let scanInfo = $state();
26
26
27
27
-
let tableOptions = $state({});
27
27
+
let tableOptions: TableOptions = $state({});
28
28
let results: PostingStatsResult | null = $state(null);
29
29
30
30
let scanner = new PostingStats((p) => { progress = Math.max(progress || 0, p) });
···
78
78
progress = 0;
79
79
scanInProgress = true;
80
80
81
81
-
// TODO
82
82
-
// let now = new Date().getTime();
83
83
-
//
84
84
-
// if (now - startTime < 100) {
85
85
-
// // artificial UI delay in case scan finishes immediately
86
86
-
// await new Promise(resolve => setTimeout(resolve, 100));
87
87
-
// }
81
81
+
let startTime = new Date().getTime();
82
82
+
let data: PostingStatsResult | null;
83
83
+
let options: TableOptions;
88
84
89
85
if (selectedTab == 'home') {
90
90
-
tableOptions = {};
91
91
-
results = await scanner.scanHomeTimeline(requestedDays);
86
86
+
options = {};
87
87
+
data = await scanner.scanHomeTimeline(requestedDays);
92
88
} else if (selectedTab == 'list') {
93
93
-
tableOptions = { showReposts: false };
94
94
-
results = await scanner.scanListTimeline(selectedList!, requestedDays);
89
89
+
options = { showReposts: false };
90
90
+
data = await scanner.scanListTimeline(selectedList!, requestedDays);
95
91
} else if (selectedTab == 'users') {
96
96
-
results = await scanner.scanUserTimelines(selectedUsers, requestedDays);
97
97
-
tableOptions = { showTotal: false, showPercentages: false };
98
98
-
} else if (selectedTab == 'you') {
99
99
-
results = await scanner.scanYourTimeline(requestedDays);
100
100
-
tableOptions = { showTotal: false, showPercentages: false };
92
92
+
options = { showTotal: false, showPercentages: false };
93
93
+
data = await scanner.scanUserTimelines(selectedUsers, requestedDays);
94
94
+
} else { // selectedTab == 'you'
95
95
+
options = { showTotal: false, showPercentages: false };
96
96
+
data = await scanner.scanYourTimeline(requestedDays);
101
97
}
102
98
99
99
+
let now = new Date().getTime();
100
100
+
101
101
+
if (now - startTime < 150) {
102
102
+
// artificial UI delay in case scan finishes immediately
103
103
+
await new Promise(resolve => setTimeout(resolve, 150));
104
104
+
}
105
105
+
106
106
+
tableOptions = options;
107
107
+
results = data;
103
108
scanInProgress = false;
104
109
}
105
110
</script>