‹ Prev
diff --git a/src/app/feeds/feed/feed.component.ts b/src/app/feeds/feed/feed.component.ts
index 7550a0bb7..ccb8aa814 100644
--- a/src/app/feeds/feed/feed.component.ts
+++ b/src/app/feeds/feed/feed.component.ts
@@ -22,7 +22,7 @@ export class FeedComponent implements OnInit {
errorMessage = '';
constructor(
- private _hackerNewsAPIService: HackerNewsAPIService,
+ private hackerNewsAPIService: HackerNewsAPIService,
private route: ActivatedRoute
) { }
@@ -34,16 +34,18 @@ export class FeedComponent implements OnInit {
});
this.pageSub = this.route.params.subscribe(params => {
- this.pageNum = params['page'] ? +params['page'] : 1;
- this._hackerNewsAPIService.fetchFeed(this.feedType, this.pageNum)
- .subscribe(
- items => this.items = items,
- error => this.errorMessage = 'Could not load ' + this.feedType + ' stories.',
- () => {
- this.listStart = ((this.pageNum - 1) * 30) + 1;
- window.scrollTo(0, 0);
- }
- );
+ this.pageNum = params.page ? +params.page : 1;
+ const feed$ = this.feedType === 'weekly'
+ ? this.hackerNewsAPIService.fetchWeeklyTop()
+ : this.hackerNewsAPIService.fetchFeed(this.feedType, this.pageNum);
+ feed$.subscribe(
+ items => this.items = items,
+ error => this.errorMessage = 'Could not load ' + this.feedType + ' stories.',
+ () => {
+ this.listStart = ((this.pageNum - 1) * 30) + 1;
+ window.scrollTo(0, 0);
+ }
+ );
});
}
}
diff --git a/src/app/shared/services/hackernews-api.service.ts b/src/app/shared/services/hackernews-api.service.ts
index e5c565364..b9ed8883b 100644
--- a/src/app/shared/services/hackernews-api.service.ts
+++ b/src/app/shared/services/hackernews-api.service.ts
@@ -1,5 +1,6 @@
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
+import { forkJoin } from 'rxjs';
import fetch from 'unfetch';
import {map } from 'rxjs/operators';
@@ -20,10 +21,20 @@ export class HackerNewsAPIService {
return lazyFetch(`${this.baseUrl}/${feedType}?page=${page}`);
}
+ fetchWeeklyTop(): Observable
{
+ const pages = [1, 2, 3, 4, 5].map(page => lazyFetch(`${this.baseUrl}/news?page=${page}`));
+ const weekAgo = Date.now() / 1000 - 7 * 24 * 3600;
+ return forkJoin(pages).pipe(
+ map(results => ([] as Story[]).concat(...results)
+ .filter(story => story.time >= weekAgo)
+ .sort((a, b) => b.points - a.points))
+ );
+ }
+
fetchItemContent(id: number): Observable {
return lazyFetch(`${this.baseUrl}/item/${id}`).pipe(map((story: Story) => {
if (story.type === 'poll') {
- let numberOfPollOptions = story.poll.length;
+ const numberOfPollOptions = story.poll.length;
story.poll_votes_count = 0;
for (let i = 1; i <= numberOfPollOptions; i++) {
this.fetchPollContent(story.id + i).subscribe(pollResults => {
@@ -63,4 +74,3 @@ function lazyFetch(url, options?) {
};
});
}
-
From 448b281ad9c8632caaae82c235737d4b4840b991 Mon Sep 17 00:00:00 2001
From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Date: Tue, 8 Sep 2026 17:17:44 +0000
Subject: [PATCH 2/2] feature: match existing formatting for weekly route and
nav link
Co-Authored-By: piyush@cognition.ai
---
src/app/app.routes.ts | 6 +++++-
src/app/core/header/header.component.html | 3 ++-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts
index 8d5a667f7..58d55bbe8 100644
--- a/src/app/app.routes.ts
+++ b/src/app/app.routes.ts
@@ -34,7 +34,11 @@ const routes: Routes = [
children: feedRoutes,
data: {feedType: 'jobs'}
},
- { path: 'weekly', children: feedRoutes, data: {feedType: 'weekly'} },
+ {
+ path: 'weekly',
+ children: feedRoutes,
+ data: {feedType: 'weekly'}
+ },
{path: 'item', loadChildren: () => import('./item-details/item-details.module').then(m => m.ItemDetailsModule)},
{path: 'user', loadChildren: () => import('./user/user.module').then(m => m.UserModule)}
];
diff --git a/src/app/core/header/header.component.html b/src/app/core/header/header.component.html
index 772303579..915d23c10 100644
--- a/src/app/core/header/header.component.html
+++ b/src/app/core/header/header.component.html
@@ -14,7 +14,8 @@
ask
|
jobs
- | weekly
+ |
+ weekly