From 46831c1d19601ac4fea90dac04f7801e98e9087b Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 20 May 2024 11:06:51 -0700 Subject: [PATCH] Try only fetching last_correspondence when needed --- .../correspondent-list.component.ts | 21 +++++++++++++++++++ .../management-list.component.ts | 6 +++--- .../rest/abstract-name-filter-service.ts | 5 +++-- src/documents/serialisers.py | 2 +- src/documents/views.py | 16 +++++++------- 5 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src-ui/src/app/components/manage/correspondent-list/correspondent-list.component.ts b/src-ui/src/app/components/manage/correspondent-list/correspondent-list.component.ts index 2d02ba983..c0053353b 100644 --- a/src-ui/src/app/components/manage/correspondent-list/correspondent-list.component.ts +++ b/src-ui/src/app/components/manage/correspondent-list/correspondent-list.component.ts @@ -12,6 +12,7 @@ import { CorrespondentService } from 'src/app/services/rest/correspondent.servic import { ToastService } from 'src/app/services/toast.service' import { CorrespondentEditDialogComponent } from '../../common/edit-dialog/correspondent-edit-dialog/correspondent-edit-dialog.component' import { ManagementListComponent } from '../management-list/management-list.component' +import { takeUntil } from 'rxjs' @Component({ selector: 'pngx-correspondent-list', @@ -63,6 +64,26 @@ export class CorrespondentListComponent extends ManagementListComponent { + this.data = c.results + this.collectionSize = c.count + this.isLoading = false + }) + } + getDeleteMessage(object: Correspondent) { return $localize`Do you really want to delete the correspondent "${object.name}"?` } diff --git a/src-ui/src/app/components/manage/management-list/management-list.component.ts b/src-ui/src/app/components/manage/management-list/management-list.component.ts index 3fbf18e09..9453affd5 100644 --- a/src-ui/src/app/components/manage/management-list/management-list.component.ts +++ b/src-ui/src/app/components/manage/management-list/management-list.component.ts @@ -52,7 +52,7 @@ export abstract class ManagementListComponent implements OnInit, OnDestroy { constructor( - private service: AbstractNameFilterService, + protected service: AbstractNameFilterService, private modalService: NgbModal, private editDialogComponent: any, private toastService: ToastService, @@ -81,8 +81,8 @@ export abstract class ManagementListComponent public isLoading: boolean = false private nameFilterDebounce: Subject - private unsubscribeNotifier: Subject = new Subject() - private _nameFilter: string + protected unsubscribeNotifier: Subject = new Subject() + protected _nameFilter: string public selectedObjects: Set = new Set() public togggleAll: boolean = false diff --git a/src-ui/src/app/services/rest/abstract-name-filter-service.ts b/src-ui/src/app/services/rest/abstract-name-filter-service.ts index 1018f0fa2..03c7e5470 100644 --- a/src-ui/src/app/services/rest/abstract-name-filter-service.ts +++ b/src-ui/src/app/services/rest/abstract-name-filter-service.ts @@ -17,9 +17,10 @@ export abstract class AbstractNameFilterService< sortField?: string, sortReverse?: boolean, nameFilter?: string, - fullPerms?: boolean + fullPerms?: boolean, + extraParams?: { [key: string]: any } ) { - let params = {} + let params = extraParams ?? {} if (nameFilter) { params['name__icontains'] = nameFilter } diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 9d722ca5d..27ce8cabe 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -291,7 +291,7 @@ class OwnedObjectSerializer( class CorrespondentSerializer(MatchingModelSerializer, OwnedObjectSerializer): - last_correspondence = serializers.DateTimeField(read_only=True) + last_correspondence = serializers.DateTimeField(read_only=True, required=False) class Meta: model = Correspondent diff --git a/src/documents/views.py b/src/documents/views.py index 8b3486f76..f717091a2 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -253,14 +253,7 @@ class PermissionsAwareDocumentCountMixin(PassUserMixin): class CorrespondentViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin): model = Correspondent - queryset = ( - Correspondent.objects.prefetch_related("documents") - .annotate( - last_correspondence=Max("documents__created"), - ) - .select_related("owner") - .order_by(Lower("name")) - ) + queryset = Correspondent.objects.select_related("owner").order_by(Lower("name")) serializer_class = CorrespondentSerializer pagination_class = StandardPagination @@ -279,6 +272,13 @@ class CorrespondentViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin): "last_correspondence", ) + def list(self, request, *args, **kwargs): + if request.query_params.get("last_correspondence", None): + self.queryset = self.queryset.annotate( + last_correspondence=Max("documents__created"), + ) + return super().list(request, *args, **kwargs) + class TagViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin): model = Tag