diff --git a/client/src/app/site/pages/meetings/pages/assignments/pages/assignment-detail/components/assignment-detail/assignment-detail.component.html b/client/src/app/site/pages/meetings/pages/assignments/pages/assignment-detail/components/assignment-detail/assignment-detail.component.html
index 742af4c11c..80054796cf 100644
--- a/client/src/app/site/pages/meetings/pages/assignments/pages/assignment-detail/components/assignment-detail/assignment-detail.component.html
+++ b/client/src/app/site/pages/meetings/pages/assignments/pages/assignment-detail/components/assignment-detail/assignment-detail.component.html
@@ -172,6 +172,16 @@
{{ 'Candidates' | translate }}
@if (assignment?.candidates?.length) {
+
1">
+
+
+
{
let component: AssignmentDetailComponent;
@@ -21,4 +23,34 @@ xdescribe(`AssignmentDetailComponent`, () => {
it(`should create`, () => {
expect(component).toBeTruthy();
});
+
+ describe('candidate sorting', () => {
+ let candidates: ViewAssignmentCandidate[];
+ let onSortingChangeSpy: jasmine.Spy;
+
+ beforeEach(() => {
+ candidates = [
+ {user: {first_name: 'Karl', last_name: 'Marx'}, id: 1} as ViewAssignmentCandidate,
+ {user: {first_name: 'Rosa', last_name: 'Luxemburg'}, id: 2} as ViewAssignmentCandidate,
+ {user: {first_name: 'Kurt', last_name: 'Eisner'}, id: 3} as ViewAssignmentCandidate,
+ {user: {first_name: 'Clara', last_name: 'Zetkin'}, id: 4} as ViewAssignmentCandidate
+ ];
+ (component as any)._assignmentCandidates = candidates;
+ onSortingChangeSpy = spyOn(component, 'onSortingChange').and.returnValue(Promise.resolve());
+ });
+
+ it('should sort candidates by first name', async () => {
+ await component.sortCandidatesByFirstName();
+ const sortedCandidates = onSortingChangeSpy.calls.mostRecent().args[0];
+ expect(sortedCandidates.map((c: ViewAssignmentCandidate) => c.user.first_name)).toEqual(['Clara', 'Karl', 'Karl', 'Kurt', 'Rosa']);
+ expect(sortedCandidates.map((c: ViewAssignmentCandidate) => c.user.last_name)).toEqual(['Zetkin', 'Liebknecht', 'Marx', 'Eisner', 'Luxemburg']);
+ });
+
+ it('should sort candidates by last name', async () => {
+ await component.sortCandidatesByLastName();
+ const sortedCandidates = onSortingChangeSpy.calls.mostRecent().args[0];
+ expect(sortedCandidates.map((c: ViewAssignmentCandidate) => c.user.last_name)).toEqual(['Eisner', 'Liebknecht', 'Luxemburg', 'Marx', 'Zetkin']);
+ expect(sortedCandidates.map((c: ViewAssignmentCandidate) => c.user.first_name)).toEqual(['Kurt', 'Karl', 'Rosa', 'Karl', 'Clara']);
+ });
+ });
});
diff --git a/client/src/app/site/pages/meetings/pages/assignments/pages/assignment-detail/components/assignment-detail/assignment-detail.component.ts b/client/src/app/site/pages/meetings/pages/assignments/pages/assignment-detail/components/assignment-detail/assignment-detail.component.ts
index 031105702b..d4a94bf8e2 100644
--- a/client/src/app/site/pages/meetings/pages/assignments/pages/assignment-detail/components/assignment-detail/assignment-detail.component.ts
+++ b/client/src/app/site/pages/meetings/pages/assignments/pages/assignment-detail/components/assignment-detail/assignment-detail.component.ts
@@ -432,6 +432,29 @@ export class AssignmentDetailComponent extends BaseMeetingComponent implements O
this.itemRepo.removeFromAgenda(this.assignment.agenda_item_id!);
}
+ /**
+ * Sorts the assignment candidates by their last name in ascending order.
+ * Calls onSortingChange with the sorted array.
+ */
+ public async sortCandidatesByLastName(): Promise {
+ const sorted = [...this.assignmentCandidates].sort((a, b) =>
+ a.user?.last_name?.localeCompare(b.user?.last_name ?? '') ?? 0
+ );
+ await this.onSortingChange(sorted);
+ }
+
+ /**
+ * Sorts the assignment candidates by their first name in ascending order.
+ * Calls onSortingChange with the sorted array.
+ */
+ public async sortCandidatesByFirstName(): Promise {
+ const sorted = [...this.assignmentCandidates].sort((a, b) =>
+ a.user?.first_name?.localeCompare(b.user?.first_name ?? '') ?? 0
+ );
+ await this.onSortingChange(sorted);
+ }
+
+
public override ngOnDestroy(): void {
super.ngOnDestroy();
if (this._navigationSubscription) {
@@ -457,6 +480,6 @@ export class AssignmentDetailComponent extends BaseMeetingComponent implements O
}
public goToHistory(): void {
- this.router.navigate([this.activeMeetingId!, `history`], { queryParams: { fqid: this.assignment.fqid } });
+ this.router.navigate([this.activeMeetingId!, `history`], {queryParams: {fqid: this.assignment.fqid}});
}
}