Skip to content

Commit a583cf6

Browse files
committed
Add sort toggle
1 parent 02d8724 commit a583cf6

File tree

4 files changed

+37
-2
lines changed

4 files changed

+37
-2
lines changed

client/src/app/site/pages/organization/pages/committees/pages/committee-list/committee-list.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { MatButtonModule } from '@angular/material/button';
44
import { MatDividerModule } from '@angular/material/divider';
55
import { MatIconModule } from '@angular/material/icon';
66
import { MatMenuModule } from '@angular/material/menu';
7+
import { MatTooltipModule } from '@angular/material/tooltip';
78
import { OpenSlidesTranslationModule } from 'src/app/site/modules/translations';
89
import { DirectivesModule } from 'src/app/ui/directives';
910
import { ChipComponent } from 'src/app/ui/modules/chip';
@@ -32,6 +33,7 @@ import { CommitteeListServiceModule } from './services/committee-list-service.mo
3233
OpenSlidesTranslationModule.forChild(),
3334
MatDividerModule,
3435
MatMenuModule,
36+
MatTooltipModule,
3537
MatIconModule,
3638
MatButtonModule,
3739
DirectivesModule

client/src/app/site/pages/organization/pages/committees/pages/committee-list/components/committee-list/committee-list.component.html

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,20 @@ <h2>{{ 'Committees' | translate }}</h2>
2222
<button mat-icon-button (click)="toggleMultiSelect()"><mat-icon>arrow_back</mat-icon></button>
2323
<span>{{ selectedRows.length }}&nbsp;{{ 'selected' | translate }}</span>
2424
</ng-container>
25+
26+
<div class="extra-controls-slot">
27+
<div>
28+
@if (selectedView === 'hierarchy') {
29+
<button mat-button matTooltip="{{ 'Hierarchy view' | translate }}" (click)="onChangeView('list')">
30+
<mat-icon>format_align_justify</mat-icon>
31+
</button>
32+
} @else {
33+
<button mat-button matTooltip="{{ 'List view' | translate }}" (click)="onChangeView('hierarchy')">
34+
<mat-icon>format_align_right</mat-icon>
35+
</button>
36+
}
37+
</div>
38+
</div>
2539
</os-head-bar>
2640

2741
<os-list
@@ -37,7 +51,7 @@ <h2>{{ 'Committees' | translate }}</h2>
3751
<div
3852
*osScrollingTableCell="'name'; row as committee"
3953
class="cell-slot fill"
40-
[style.padding-left]="(committee.all_parent_ids?.length || 0) * 25 + 'px'"
54+
[style.padding-left]="(selectedView === 'hierarchy' ? (committee.all_parent_ids?.length || 0) : 0) * 25 + 'px'"
4155
>
4256
@if (!isMultiSelect && committee.canAccess()) {
4357
<a class="stretch-to-fill-parent" [attr.aria-label]="ariaLabel(committee)" [routerLink]="committee.id"></a>

client/src/app/site/pages/organization/pages/committees/pages/committee-list/components/committee-list/committee-list.component.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ export class CommitteeListComponent extends BaseListViewComponent<ViewCommittee>
3333
return this.translate.instant(`Agenda items are in process. Please wait ...`);
3434
}
3535

36+
public selectedView = `list`;
37+
3638
public constructor(
3739
protected override translate: TranslateService,
3840
public committeeController: CommitteeControllerService,
@@ -50,6 +52,12 @@ export class CommitteeListComponent extends BaseListViewComponent<ViewCommittee>
5052
super.setTitle(`Committees`);
5153
this.canMultiSelect = true;
5254
this.listStorageIndex = COMMITTEE_LIST_STORAGE_INDEX;
55+
this.selectedView = this.sortService.hierarchySort ? `hierarchy` : `list`;
56+
}
57+
58+
public onChangeView(type: string): void {
59+
this.selectedView = type;
60+
this.sortService.hierarchySort = this.selectedView === `hierarchy`;
5361
}
5462

5563
public editSingle(committee: ViewCommittee): void {

client/src/app/site/pages/organization/pages/committees/pages/committee-list/services/committee-list-sort.service/committee-sort.service.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,17 @@ import { ViewCommittee } from '../../../../view-models';
1313
export class CommitteeSortService extends BaseSortListService<ViewCommittee> {
1414
protected storageKey = `CommitteeList`;
1515

16-
private hierarchySort = true;
16+
private _hierarchySort = true;
17+
public get hierarchySort(): boolean {
18+
return this._hierarchySort;
19+
}
20+
21+
public set hierarchySort(value: boolean) {
22+
this._hierarchySort = value;
23+
// TODO: Find way to do a proper list update
24+
this.setSorting(this.sortProperty, !this.ascending);
25+
this.setSorting(this.sortProperty, !this.ascending);
26+
}
1727

1828
protected repositoryToken: ProviderToken<BaseRepository<any, any>> = CommitteeRepositoryService;
1929

@@ -38,6 +48,7 @@ export class CommitteeSortService extends BaseSortListService<ViewCommittee> {
3848
* Sorts the given array according to this services sort settings and returns it.
3949
*/
4050
public override async sort(array: ViewCommittee[]): Promise<ViewCommittee[]> {
51+
console.log(`sort`, this._hierarchySort);
4152
if (this.hierarchySort) {
4253
const input = [...array];
4354
return (await this.doHierarchySort(input, null)).flat(Infinity);

0 commit comments

Comments
 (0)