mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-02-11 23:59:31 -06:00
Handle opening a version should rediect to head
This commit is contained in:
@@ -437,6 +437,7 @@ export class DocumentDetailComponent
|
||||
}
|
||||
|
||||
private loadDocument(documentId: number): void {
|
||||
let redirectedToHead = false
|
||||
this.selectedVersionId = documentId
|
||||
this.previewUrl = this.documentsService.getPreviewUrl(
|
||||
this.selectedVersionId
|
||||
@@ -459,7 +460,24 @@ export class DocumentDetailComponent
|
||||
this.documentsService
|
||||
.get(documentId)
|
||||
.pipe(
|
||||
catchError(() => {
|
||||
catchError((error) => {
|
||||
if (error?.status === 404) {
|
||||
return this.documentsService.getHeadId(documentId).pipe(
|
||||
map((result) => {
|
||||
const headId = result?.head_id
|
||||
if (headId && headId !== documentId) {
|
||||
const section =
|
||||
this.route.snapshot.paramMap.get('section') || 'details'
|
||||
redirectedToHead = true
|
||||
this.router.navigate(['documents', headId, section], {
|
||||
replaceUrl: true,
|
||||
})
|
||||
}
|
||||
return null
|
||||
}),
|
||||
catchError(() => of(null))
|
||||
)
|
||||
}
|
||||
// 404 is handled in the subscribe below
|
||||
return of(null)
|
||||
}),
|
||||
@@ -470,6 +488,9 @@ export class DocumentDetailComponent
|
||||
.subscribe({
|
||||
next: (doc) => {
|
||||
if (!doc) {
|
||||
if (redirectedToHead) {
|
||||
return
|
||||
}
|
||||
this.router.navigate(['404'], { replaceUrl: true })
|
||||
return
|
||||
}
|
||||
|
||||
@@ -211,6 +211,12 @@ export class DocumentService extends AbstractPaperlessService<Document> {
|
||||
})
|
||||
}
|
||||
|
||||
getHeadId(documentId: number) {
|
||||
return this.http.get<{ head_id: number }>(
|
||||
this.getResourceUrl(documentId, 'head')
|
||||
)
|
||||
}
|
||||
|
||||
deleteVersion(headDocumentId: number, versionId: number) {
|
||||
return this.http.delete<{ result: string; current_version_id: number }>(
|
||||
this.getResourceUrl(headDocumentId, `versions/${versionId}`)
|
||||
|
||||
@@ -805,6 +805,26 @@ class DocumentViewSet(
|
||||
)
|
||||
return super().get_serializer(*args, **kwargs)
|
||||
|
||||
@action(methods=["get"], detail=True, url_path="head")
|
||||
def head(self, request, pk=None):
|
||||
try:
|
||||
doc = Document.global_objects.select_related(
|
||||
"owner",
|
||||
"head_version",
|
||||
).get(pk=pk)
|
||||
except Document.DoesNotExist:
|
||||
raise Http404
|
||||
|
||||
head_doc = doc if doc.head_version_id is None else doc.head_version
|
||||
if request.user is not None and not has_perms_owner_aware(
|
||||
request.user,
|
||||
"view_document",
|
||||
head_doc,
|
||||
):
|
||||
return HttpResponseForbidden("Insufficient permissions")
|
||||
|
||||
return Response({"head_id": head_doc.id})
|
||||
|
||||
def update(self, request, *args, **kwargs):
|
||||
response = super().update(request, *args, **kwargs)
|
||||
from documents import index
|
||||
|
||||
Reference in New Issue
Block a user