Skip to content

Commit 676ba9c

Browse files
authored
Merge pull request #1376 from paperless-ngx/fix/saved-view-page-param
Fix: saved view page parameter
2 parents ef0080b + d0f5cc8 commit 676ba9c

File tree

4 files changed

+39
-25
lines changed

4 files changed

+39
-25
lines changed

src-ui/src/app/components/document-list/document-list.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@
9191
<span i18n *ngIf="list.selected.size == 0">{list.collectionSize, plural, =1 {One document} other {{{list.collectionSize || 0}} documents}}</span>&nbsp;<span i18n *ngIf="isFiltered">(filtered)</span>
9292
</ng-container>
9393
</p>
94-
<ngb-pagination [pageSize]="list.currentPageSize" [collectionSize]="list.collectionSize" (pageChange)="setPage($event)" [page]="list.currentPage" [maxSize]="5"
94+
<ngb-pagination *ngIf="list.collectionSize" [pageSize]="list.currentPageSize" [collectionSize]="list.collectionSize" [(page)]="list.currentPage" [maxSize]="5"
9595
[rotate]="true" aria-label="Default pagination"></ngb-pagination>
9696
</div>
9797
</ng-template>

src-ui/src/app/components/document-list/document-list.component.ts

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
ViewChild,
77
ViewChildren,
88
} from '@angular/core'
9-
import { ActivatedRoute, Router } from '@angular/router'
9+
import { ActivatedRoute, convertToParamMap, Router } from '@angular/router'
1010
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
1111
import { filter, first, map, Subject, switchMap, takeUntil } from 'rxjs'
1212
import { FilterRule, isFullTextFilterRule } from 'src/app/data/filter-rule'
@@ -87,10 +87,6 @@ export class DocumentListComponent implements OnInit, OnDestroy {
8787
this.list.setSort(event.column, event.reverse)
8888
}
8989

90-
setPage(page: number) {
91-
this.list.currentPage = page
92-
}
93-
9490
get isBulkEditing(): boolean {
9591
return this.list.selected.size > 0
9692
}
@@ -126,7 +122,11 @@ export class DocumentListComponent implements OnInit, OnDestroy {
126122
this.router.navigate(['404'])
127123
return
128124
}
129-
this.list.activateSavedView(view)
125+
126+
this.list.activateSavedViewWithQueryParams(
127+
view,
128+
convertToParamMap(this.route.snapshot.queryParams)
129+
)
130130
this.list.reload()
131131
this.unmodifiedFilterRules = view.filter_rules
132132
})
@@ -139,7 +139,13 @@ export class DocumentListComponent implements OnInit, OnDestroy {
139139
.subscribe((queryParams) => {
140140
if (queryParams.has('view')) {
141141
// loading a saved view on /documents
142-
this.loadViewConfig(parseInt(queryParams.get('view')))
142+
this.savedViewService
143+
.getCached(parseInt(queryParams.get('view')))
144+
.pipe(first())
145+
.subscribe((view) => {
146+
this.list.activateSavedView(view)
147+
this.list.reload()
148+
})
143149
} else {
144150
this.list.activateSavedView(null)
145151
this.list.loadFromQueryParams(queryParams)
@@ -154,16 +160,6 @@ export class DocumentListComponent implements OnInit, OnDestroy {
154160
this.unsubscribeNotifier.complete()
155161
}
156162

157-
loadViewConfig(viewId: number) {
158-
this.savedViewService
159-
.getCached(viewId)
160-
.pipe(first())
161-
.subscribe((view) => {
162-
this.list.activateSavedView(view)
163-
this.list.reload()
164-
})
165-
}
166-
167163
saveViewConfig() {
168164
if (this.list.activeSavedViewId != null) {
169165
let savedView: PaperlessSavedView = {

src-ui/src/app/services/document-list-view.service.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { PaperlessDocument } from '../data/paperless-document'
1111
import { PaperlessSavedView } from '../data/paperless-saved-view'
1212
import { SETTINGS_KEYS } from '../data/paperless-uisettings'
1313
import { DOCUMENT_LIST_SERVICE } from '../data/storage-keys'
14-
import { generateParams, parseParams } from '../utils/query-params'
14+
import { paramsFromViewState, paramsToViewState } from '../utils/query-params'
1515
import { DocumentService, DOCUMENT_SORT_FIELDS } from './rest/document.service'
1616
import { SettingsService } from './settings.service'
1717

@@ -147,6 +147,15 @@ export class DocumentListViewService {
147147
}
148148
}
149149

150+
activateSavedViewWithQueryParams(
151+
view: PaperlessSavedView,
152+
queryParams: ParamMap
153+
) {
154+
const viewState = paramsToViewState(queryParams)
155+
this.activateSavedView(view)
156+
this.currentPage = viewState.currentPage
157+
}
158+
150159
loadSavedView(view: PaperlessSavedView, closeCurrentView: boolean = false) {
151160
if (closeCurrentView) {
152161
this._activeSavedViewId = null
@@ -171,7 +180,7 @@ export class DocumentListViewService {
171180
loadFromQueryParams(queryParams: ParamMap) {
172181
const paramsEmpty: boolean = queryParams.keys.length == 0
173182
let newState: ListViewState = this.listViewStates.get(null)
174-
if (!paramsEmpty) newState = parseParams(queryParams)
183+
if (!paramsEmpty) newState = paramsToViewState(queryParams)
175184
if (newState == undefined) newState = this.defaultListViewState() // if nothing in local storage
176185

177186
// only reload if things have changed
@@ -212,11 +221,16 @@ export class DocumentListViewService {
212221
this.isReloading = false
213222
activeListViewState.collectionSize = result.count
214223
activeListViewState.documents = result.results
215-
216224
if (updateQueryParams && !this._activeSavedViewId) {
217225
let base = ['/documents']
218226
this.router.navigate(base, {
219-
queryParams: generateParams(activeListViewState),
227+
queryParams: paramsFromViewState(activeListViewState),
228+
replaceUrl: !this.router.routerState.snapshot.url.includes('?'), // in case navigating from params-less /documents
229+
})
230+
} else if (this._activeSavedViewId) {
231+
this.router.navigate([], {
232+
queryParams: paramsFromViewState(activeListViewState, true),
233+
queryParamsHandling: 'merge',
220234
})
221235
}
222236

@@ -305,7 +319,6 @@ export class DocumentListViewService {
305319

306320
set currentPage(page: number) {
307321
if (this.activeListViewState.currentPage == page) return
308-
this._activeSavedViewId = null
309322
this.activeListViewState.currentPage = page
310323
this.reload()
311324
this.saveDocumentListView()

src-ui/src/app/utils/query-params.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,22 @@ const SORT_FIELD_PARAMETER = 'sort'
77
const SORT_REVERSE_PARAMETER = 'reverse'
88
const PAGE_PARAMETER = 'page'
99

10-
export function generateParams(viewState: ListViewState): Params {
10+
export function paramsFromViewState(
11+
viewState: ListViewState,
12+
pageOnly: boolean = false
13+
): Params {
1114
let params = queryParamsFromFilterRules(viewState.filterRules)
1215
params[SORT_FIELD_PARAMETER] = viewState.sortField
1316
params[SORT_REVERSE_PARAMETER] = viewState.sortReverse ? 1 : undefined
17+
if (pageOnly) params = {}
1418
params[PAGE_PARAMETER] = isNaN(viewState.currentPage)
1519
? 1
1620
: viewState.currentPage
21+
if (pageOnly && viewState.currentPage == 1) params[PAGE_PARAMETER] = null
1722
return params
1823
}
1924

20-
export function parseParams(queryParams: ParamMap): ListViewState {
25+
export function paramsToViewState(queryParams: ParamMap): ListViewState {
2126
let filterRules = filterRulesFromQueryParams(queryParams)
2227
let sortField = queryParams.get(SORT_FIELD_PARAMETER)
2328
let sortReverse =

0 commit comments

Comments
 (0)