Skip to content

Commit 4a577af

Browse files
committed
feat: add sorting for articles by date with toggle support
1 parent bb4fee1 commit 4a577af

File tree

4 files changed

+31
-3
lines changed

4 files changed

+31
-3
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export enum SortOrder {
2+
Asc = 'asc',
3+
Desc = 'desc',
4+
}

src/app/pages/home/home-page.component.html

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@
1010
</button>
1111
<app-row-spacer/>
1212
<mat-button-toggle>
13+
<mat-icon
14+
[class]="($dateOrder | async) === SortOrder.Asc ? 'highlighted' : undefined"
15+
(click)="orderHandler('date')"
16+
[title]="($dateOrder | async) === SortOrder.Asc ? 'Older first' : 'Newer first'"
17+
>schedule
18+
</mat-icon>
1319
<mat-icon
1420
[class]="($readFilter | async) ? 'highlighted' : undefined"
1521
(click)="filterHandler('read')"

src/app/pages/home/home-page.component.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { Paginator } from '../../components/paginator/paginator'
2020
import { PageService } from '../../services/page-service'
2121
import { PageDisplayToggle } from '../../components/page-display-toggle/page-display-toggle'
2222
import { AsyncPipe } from '@angular/common'
23+
import { SortOrder } from '../../entities/base/base.enums'
2324

2425
@Component({
2526
selector: 'app-home',
@@ -53,6 +54,7 @@ export class HomePage implements OnInit {
5354

5455
$readFilter = new BehaviorSubject(true)
5556
$favFilter = new BehaviorSubject(false)
57+
$dateOrder = new BehaviorSubject(SortOrder.Desc)
5658

5759
favTagId = signal<string>('')
5860
userTags = signal<Tag[]>([])
@@ -91,8 +93,9 @@ export class HomePage implements OnInit {
9193
this.pageService.$currentPage,
9294
this.$favFilter,
9395
this.$readFilter,
96+
this.$dateOrder,
9497
]).pipe(
95-
switchMap(([perPage, pageNumber, fav, read]) => {
98+
switchMap(([perPage, pageNumber, fav, read, dateSort]) => {
9699
const filters: Record<string, string | boolean> = {}
97100

98101
if (read) {
@@ -109,6 +112,9 @@ export class HomePage implements OnInit {
109112
pageNumber,
110113
},
111114
filters,
115+
sort: {
116+
date: dateSort,
117+
},
112118
})
113119
}),
114120
)
@@ -160,7 +166,14 @@ export class HomePage implements OnInit {
160166
this.$readFilter.next(!this.$readFilter.value)
161167
} else {
162168
this.pageService.setCurrentPage(1)
163-
this.$favFilter.next(!this.$favFilter.value)
169+
}
170+
this.$favFilter.next(!this.$favFilter.value)
171+
}
172+
173+
orderHandler(param: 'date') {
174+
if (param === 'date') {
175+
this.$dateOrder.next(this.$dateOrder.value === SortOrder.Asc ? SortOrder.Desc : SortOrder.Asc)
176+
this.pageService.setCurrentPage(1)
164177
}
165178
}
166179

@@ -181,4 +194,6 @@ export class HomePage implements OnInit {
181194
this.pageService.setCurrentPage(1)
182195
})
183196
}
197+
198+
protected readonly SortOrder = SortOrder
184199
}

src/app/services/feed-service.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { environment } from '../../environments/environment'
44
import { Feed, FeedDTO } from '../entities/feed/feed.types'
55
import { Article, ArticleDTO } from '../entities/article/article.types'
66
import { Paginated, Pagination } from '../entities/base/base.types'
7+
import { SortOrder } from '../entities/base/base.enums'
78

89
@Injectable({
910
providedIn: 'root',
@@ -20,12 +21,14 @@ export class FeedService {
2021
getAllArticles({
2122
pagination,
2223
filters,
24+
sort,
2325
}: {
2426
pagination?: Partial<Pagination>
2527
filters?: { tags?: string; read?: boolean }
28+
sort?: { date: SortOrder }
2629
}) {
2730
return this.httpClient.get<Paginated<Article>>(`${environment.api}/article`, {
28-
params: { ...pagination, ...filters },
31+
params: { ...pagination, ...filters, dateSort: sort?.date || SortOrder.Desc },
2932
})
3033
}
3134

0 commit comments

Comments
 (0)