Skip to content

Commit a002e1e

Browse files
authored
Merge pull request #191 from cnblogs/refactor-paging
refactor: paging
2 parents efd6382 + 9107b72 commit a002e1e

File tree

6 files changed

+36
-28
lines changed

6 files changed

+36
-28
lines changed

src/cmd/post-list/post-list-view.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { globalCtx } from '@/ctx/global-ctx'
2-
import { PostService } from '@/service/post/post'
32
import { window } from 'vscode'
43
import { postDataProvider } from '@/tree-view/provider/post-data-provider'
54
import { Alert } from '@/infra/alert'
@@ -53,8 +52,6 @@ function updatePostListViewTitle() {
5352
}
5453

5554
export namespace PostListView {
56-
import calcPageCount = PageList.calcPageCount
57-
5855
export async function refresh({ queue = false, pageIndex = 1 } = {}): Promise<boolean> {
5956
if (isRefreshing && !queue) {
6057
await refreshTask
@@ -67,13 +64,13 @@ export namespace PostListView {
6764
const fut = async () => {
6865
await setRefreshing(true)
6966
const page = await postDataProvider.loadPosts(pageIndex)
70-
const postCount = await PostService.getCount()
71-
const pageCount = calcPageCount(page.cap, postCount)
67+
const pageSize = page?.size ?? 30
68+
const pageCount = page?.count ?? 1
7269
const hasPrev = PageList.hasPrev(pageIndex)
7370
const hasNext = PageList.hasNext(pageIndex, pageCount)
7471

7572
await setPostListContext(pageCount, hasPrev, hasNext)
76-
await updatePostListState(pageIndex, page.cap, page.items.length, pageCount)
73+
await updatePostListState(pageIndex, pageSize, pageCount, hasPrev, hasNext)
7774
updatePostListViewTitle()
7875
await postDataProvider.refreshSearch()
7976
await setRefreshing(false)

src/model/page.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export type Page<T> = {
22
index: number
3-
cap: number
3+
size: number
4+
count: number
45
items: T[]
56
}
67

src/model/post-list-state.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
export type PostListState = {
22
pageIndex: number
3-
pageCap: number
4-
pageItemCount: number
3+
pageSize: number
54
pageCount: number
65
hasPrev: boolean
76
hasNext: boolean

src/service/post/post-list-view.ts

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { Post } from '@/model/post'
22
import { extTreeViews } from '@/tree-view/tree-view-register'
3-
import { PageList } from '@/model/page'
43
import { PostListState } from '@/model/post-list-state'
54
import { LocalState } from '@/ctx/local-state'
65
import { PostListRespItem } from '@/model/post-list-resp-item'
@@ -33,17 +32,14 @@ export function getListState() {
3332

3433
export async function updatePostListState(
3534
pageIndex: number,
36-
pageCap: number,
37-
pageItemCount: number,
38-
pageCount: number
39-
) {
40-
const hasPrev = PageList.hasPrev(pageIndex)
41-
const hasNext = PageList.hasNext(pageIndex, pageCount)
42-
35+
pageSize: number,
36+
pageCount: number,
37+
hasPrev: boolean,
38+
hasNext: boolean
39+
): Promise<void> {
4340
const finalState = <PostListState>{
4441
pageIndex,
45-
pageCap,
46-
pageItemCount,
42+
pageSize,
4743
pageCount,
4844
hasPrev,
4945
hasNext,

src/service/post/post.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ export namespace PostService {
3737
const listModel = <PostListModel>JSON.parse(resp)
3838
const page = {
3939
index: listModel.pageIndex,
40-
cap: listModel.pageSize,
40+
size: listModel.pageSize,
41+
count: PageList.calcPageCount(listModel.pageSize, listModel.postsCount),
4142
items: listModel.postList.map(x => Object.assign(new Post(), x)),
4243
} as Page<Post>
4344

@@ -49,6 +50,19 @@ export namespace PostService {
4950
}
5051
}
5152

53+
export async function getPosts({ pageIndex = 1, pageSize = 30, categoryId = <'' | number>'', search = '' }) {
54+
const para = consUrlPara(
55+
['t', '1'],
56+
['p', pageIndex.toString()],
57+
['s', pageSize.toString()],
58+
['search', search],
59+
['cid', categoryId.toString()]
60+
)
61+
const url = `${AppConst.ApiBase.BLOG_BACKEND}/posts/list?${para}`
62+
const resp = await AuthedReq.get(url, consHeader())
63+
return <PostListModel>JSON.parse(resp)
64+
}
65+
5266
export async function getList(pageIndex: number, pageCap: number) {
5367
const req = await getAuthedPostReq()
5468
try {

src/tree-view/provider/post-data-provider.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { PostEntryMetadata, PostMetadata } from '@/tree-view/model/post-metadata
77
import { PostSearchResultEntry } from '@/tree-view/model/post-search-result-entry'
88
import { PostTreeItem } from '@/tree-view/model/post-tree-item'
99
import { PostListCfg } from '@/ctx/cfg/post-list'
10-
import { Page } from '@/model/page'
10+
import { Page, PageList } from '@/model/page'
1111
import { PostListView } from '@/cmd/post-list/post-list-view'
1212

1313
export type PostListTreeItem = Post | PostTreeItem | TreeItem | PostMetadata | PostSearchResultEntry
@@ -52,16 +52,17 @@ export class PostDataProvider implements TreeDataProvider<PostListTreeItem> {
5252
return toTreeItem(item)
5353
}
5454

55-
async loadPosts(pageIndex: number): Promise<Page<Post>> {
56-
const pageSize = PostListCfg.getListPageSize()
55+
async loadPosts(pageIndex: number): Promise<Page<Post> | null> {
56+
const pageSize = PostListCfg.getListPageSize() ?? 30
5757

5858
try {
59-
const result = await PostService.getList(pageIndex, pageSize)
59+
const result = await PostService.getPosts({ pageIndex, pageSize })
60+
6061
this.page = {
61-
index: pageIndex,
62-
cap: pageSize,
63-
// TODO: need better design
64-
items: result.map(it => Object.assign(new Post(), it)),
62+
index: result.pageIndex,
63+
size: pageSize,
64+
count: PageList.calcPageCount(pageSize, result.postsCount),
65+
items: result.postList.map(x => Object.assign(new Post(), x)),
6566
}
6667

6768
this.fireTreeDataChangedEvent()

0 commit comments

Comments
 (0)