Skip to content

Commit 7c73508

Browse files
Mutugiiidogi
andauthored
teams: smoother list default sorting (fixes #9931) (#9932)
Co-authored-by: dogi <dogi@users.noreply.github.com>
1 parent 8353ea4 commit 7c73508

3 files changed

Lines changed: 18 additions & 38 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "planet",
33
"license": "AGPL-3.0",
4-
"version": "0.22.82",
4+
"version": "0.22.83",
55
"myplanet": {
66
"latest": "v0.55.45",
77
"min": "v0.53.91"

src/app/teams/teams.component.html

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
</div>
4545

4646
<div class="primary-link-hover" [ngClass]="{'view-container view-table view-full-height':!isDialog}">
47-
<mat-table #table class="responsive-table" [dataSource]="teams" matSortActive="visitLog.visitCount" matSortDirection="desc" matSort [matSortDisableClear]="true">
47+
<mat-table #table class="responsive-table" [dataSource]="teams" matSort [matSortDisableClear]="true">
4848
<ng-container matColumnDef="doc.name">
4949
<mat-header-cell *matHeaderCellDef mat-sort-header="doc.name" i18n>Name</mat-header-cell>
5050
<mat-cell *matCellDef="let element">
@@ -85,17 +85,8 @@ <h3 class="team-name">
8585
</ng-container>
8686
</mat-cell>
8787
</ng-container>
88-
<ng-container matColumnDef="membership">
89-
<mat-header-cell *matHeaderCellDef mat-sort-header="membership" hidden>Membership</mat-header-cell>
90-
<mat-cell *matCellDef="let element" hidden>{{ element.userStatus }}</mat-cell>
91-
</ng-container>
9288
<ng-container matColumnDef="action">
93-
<mat-header-cell *matHeaderCellDef i18n>
94-
<span>Action</span>
95-
<button mat-button *ngIf="showUserTeamsFilter" (click)="sortbyUserTeams()" i18n-title title="Toggle myTeams">
96-
<mat-icon>check</mat-icon>
97-
</button>
98-
</mat-header-cell>
89+
<mat-header-cell *matHeaderCellDef i18n>Action</mat-header-cell>
9990
<mat-cell *matCellDef="let element">
10091
<div class="button-container" [ngClass]="{'horizontal-align': isMobile}">
10192
<ng-container [ngSwitch]="element.userStatus" *ngIf="user.isUserAdmin || user.roles.length">

src/app/teams/teams.component.ts

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ export class TeamsComponent implements OnInit, AfterViewInit {
8686
get tableData() {
8787
return this.teams;
8888
}
89-
showUserTeamsFilter = false;
9089

9190
constructor(
9291
private userService: UserService,
@@ -110,16 +109,7 @@ export class TeamsComponent implements OnInit, AfterViewInit {
110109
filterSpecificFieldsByWord([ 'doc.name' ]),
111110
(data, filter) => filterSpecificFields([ 'userStatus' ])(data, this.myTeamsFilter === 'on' ? 'member' : '')
112111
]);
113-
this.teams.sortingDataAccessor = (item, property) => {
114-
if (property === 'membership') {
115-
switch (item.userStatus) {
116-
case 'member': return 2;
117-
case 'requesting': return 1;
118-
default: return 0;
119-
}
120-
}
121-
return deepSortingDataAccessor(item, property);
122-
};
112+
this.teams.sortingDataAccessor = deepSortingDataAccessor;
123113
this.couchService.checkAuthorization('teams').subscribe((isAuthorized) => this.isAuthorized = isAuthorized);
124114
this.displayedColumns = this.isDialog ?
125115
[ 'doc.name', 'visitLog.lastVisit', 'visitLog.visitCount', 'doc.teamType' ] :
@@ -160,8 +150,6 @@ export class TeamsComponent implements OnInit, AfterViewInit {
160150
}
161151
this.dialogsLoadingService.stop();
162152
this.isLoading = false;
163-
this.showUserTeamsFilter = this.myTeamsFilter === 'off' &&
164-
this.teams.data.some(e => e.userStatus === 'member' || e.userStatus === 'requesting');
165153
}, (error) => {
166154
if (this.userNotInShelf) {
167155
this.displayedColumns = [ 'doc.name', 'visitLog.lastVisit', 'visitLog.visitCount', 'doc.teamType' ];
@@ -219,6 +207,20 @@ export class TeamsComponent implements OnInit, AfterViewInit {
219207
default:
220208
return { ...team, userStatus: 'unrelated' };
221209
}
210+
}).sort((teamA, teamB) => {
211+
const membershipOrder = { member: 2, requesting: 1, unrelated: 0 };
212+
const membershipDifference = membershipOrder[teamB.userStatus] - membershipOrder[teamA.userStatus];
213+
if (membershipDifference !== 0) {
214+
return membershipDifference;
215+
}
216+
217+
const lastVisitA = teamA.visitLog.lastVisit || 0;
218+
const lastVisitB = teamB.visitLog.lastVisit || 0;
219+
if (lastVisitB !== lastVisitA) {
220+
return lastVisitB - lastVisitA;
221+
}
222+
223+
return teamA.doc.name.localeCompare(teamB.doc.name);
222224
});
223225
}
224226

@@ -342,19 +344,6 @@ export class TeamsComponent implements OnInit, AfterViewInit {
342344
this.teams.filter = filterValue || (this.myTeamsFilter ? ' ' : '');
343345
}
344346

345-
sortbyUserTeams() {
346-
if (!this.teams.data.some(e => e.userStatus === 'member' || e.userStatus === 'requesting')) {
347-
return;
348-
}
349-
350-
this.sort.active = 'membership';
351-
this.sort.direction = 'desc';
352-
this.sort.sortChange.emit({
353-
active: this.sort.active,
354-
direction: this.sort.direction
355-
});
356-
}
357-
358347
getTeamTypeLabel(team: any): string {
359348
return team.doc.type === 'enterprise' ? $localize`enterprise` : $localize`team`;
360349
}

0 commit comments

Comments
 (0)