i have setup where i fire a request to the backend and provide with the request the query params pageSize and pageIndex to the backend. The Page parameters are controlled by a PageEvent.
So in the old world that looks like
reloading: boolean = false
pageSize: number = 20
pageIndex: number = 0
totalSize: number = 0
accounts: AccountSearchEntry[] = []
request = new AccountSearchRequest('')
search() {
this.reload(0, this.pageSize)
}
private reload(page: number, size: number) {
if (this.reloading) return
this.reloading = true
this.searchService.searchAccounts(this.request, page, size).subscribe(
{
next: value => this.handleData(value),
error: e => this.handleError(e)
}
)
}
private handleData(response: AccountSearchResponse) {
let p = response.result
this.accounts = p.content
this.pageSize = p.pageable.size
this.pageIndex = p.pageable.number
this.totalSize = p.totalSize
this.reloading = false
}
So far so good. No i want to switch to signals.
So i changed it like that.
pageSize = signal<number>(20)
pageIndex = signal<number>(0)
totalSize = signal<number>(0)
fullTextSearch = signal<string>('')
accountsCriteria = computed(() => ({
request: new AccountSearchRequest(this.fullTextSearch()),
pageSize: this.pageSize(),
pageIndex: this.pageIndex()
}))
accountsResource = resource({
request: this.accountsCriteria,
loader: (param) => {
return toPromise(this.searchService.searchAccounts(param.request.request, param.request.pageIndex, param.request.pageSize), param.abortSignal)
}
});
reloading = this.accountsResource.isLoading
accounts = computed(() => this.accountsResource.value ?? [])
the problem comes if i want so reset the page index if i set the fullTextSearch
like so
setFullTextSearch(val: string) {
this.pageIndex.set(0)
this.fullTextSearch.set(val)
}
because that fires two requests to the backend, what i do not want.
Also handling the PageEvent is now difficult
handlePageEvent(event: PageEvent) {
// this.reload(event.pageIndex, event.pageSize)
this.pageIndex.set(event.pageIndex)
this.pageSize.set(event.pageSize)
}
I had the idea to introduce a second criteria for the page and one for the request, but that seems not practival eigher. Also i like to update the pageSize and the pageIndex from both sides. If there is a change on the UI the page size should change and a request will be fired to the backend. But if the backend returns a value, the page size is overwritten with the data provided by the backend.
Any help appreciated
Thx Oli
3