@@ -4,6 +4,7 @@ import { readingStore } from './reading.svelte';
44import { shareReadingStore } from './shareReading.svelte' ;
55import { sharesStore } from './shares.svelte' ;
66import { socialStore } from './social.svelte' ;
7+ import { preferences } from './preferences.svelte' ;
78import type { Article , SocialShare , CombinedFeedItem , UserShare } from '$lib/types' ;
89
910export type ViewMode = 'articles' | 'shares' | 'userShares' | 'combined' ;
@@ -57,34 +58,44 @@ function createFeedViewStore() {
5758 // Access articlesStore version for reactivity
5859 const allArticles = articlesStore . allArticles ;
5960 const positions = readingStore . readPositions ;
61+ const sortOrder = preferences . sortOrder ;
62+
63+ let articles : Article [ ] ;
6064
6165 if ( starredFilter ) {
6266 // Starred view
63- return allArticles . filter ( ( a ) => positions . get ( a . guid ) ?. starred === true ) ;
64- }
65-
66- let articles = allArticles ;
67+ articles = allArticles . filter ( ( a ) => positions . get ( a . guid ) ?. starred === true ) ;
68+ } else {
69+ articles = allArticles ;
6770
68- // Filter by subscription
69- if ( feedFilter ) {
70- const feedId = parseInt ( feedFilter ) ;
71- articles = articles . filter ( ( a ) => a . subscriptionId === feedId ) ;
72- }
71+ // Filter by subscription
72+ if ( feedFilter ) {
73+ const feedId = parseInt ( feedFilter ) ;
74+ articles = articles . filter ( ( a ) => a . subscriptionId === feedId ) ;
75+ }
7376
74- // Filter to unread only, but keep articles read this session visible
75- if ( showOnlyUnread ) {
76- articles = articles . filter (
77- ( a ) => ! positions . has ( a . guid ) || readArticleGuidsThisSession . has ( a . guid )
78- ) ;
77+ // Filter to unread only, but keep articles read this session visible
78+ if ( showOnlyUnread ) {
79+ articles = articles . filter (
80+ ( a ) => ! positions . has ( a . guid ) || readArticleGuidsThisSession . has ( a . guid )
81+ ) ;
82+ }
7983 }
8084
8185 // Deduplicate by GUID
8286 const seen = new Set < string > ( ) ;
83- return articles . filter ( ( a ) => {
87+ articles = articles . filter ( ( a ) => {
8488 if ( seen . has ( a . guid ) ) return false ;
8589 seen . add ( a . guid ) ;
8690 return true ;
8791 } ) ;
92+
93+ // Apply sort order (articles come from liveDb sorted newest first)
94+ if ( sortOrder === 'oldest' ) {
95+ articles = [ ...articles ] . reverse ( ) ;
96+ }
97+
98+ return articles ;
8899 } ) ;
89100
90101 // Derived: paginated articles (limited to loadedArticleCount)
@@ -94,6 +105,7 @@ function createFeedViewStore() {
94105 let displayedShares = $derived . by ( ( ) : SocialShare [ ] => {
95106 const shares = socialStore . shares ;
96107 const positions = shareReadingStore . shareReadPositions ;
108+ const sortOrder = preferences . sortOrder ;
97109
98110 let filtered : SocialShare [ ] ;
99111 if ( sharerFilter ) {
@@ -109,15 +121,26 @@ function createFeedViewStore() {
109121 ) ;
110122 }
111123
124+ // Apply sort order
125+ filtered . sort ( ( a , b ) => {
126+ const dateA = new Date ( a . itemPublishedAt || a . createdAt ) . getTime ( ) ;
127+ const dateB = new Date ( b . itemPublishedAt || b . createdAt ) . getTime ( ) ;
128+ return sortOrder === 'newest' ? dateB - dateA : dateA - dateB ;
129+ } ) ;
130+
112131 return filtered ;
113132 } ) ;
114133
115134 // Derived: user's own shares
116135 let displayedUserShares = $derived . by ( ( ) : UserShare [ ] => {
117136 if ( ! sharedFilter ) return [ ] ;
118137
138+ const sortOrder = preferences . sortOrder ;
119139 const shares = Array . from ( sharesStore . userShares . values ( ) ) ;
120- shares . sort ( ( a , b ) => new Date ( b . createdAt ) . getTime ( ) - new Date ( a . createdAt ) . getTime ( ) ) ;
140+ shares . sort ( ( a , b ) => {
141+ const diff = new Date ( b . createdAt ) . getTime ( ) - new Date ( a . createdAt ) . getTime ( ) ;
142+ return sortOrder === 'newest' ? diff : - diff ;
143+ } ) ;
121144 return shares ;
122145 } ) ;
123146
@@ -138,7 +161,11 @@ function createFeedViewStore() {
138161 } ) ) ,
139162 ] ;
140163
141- combined . sort ( ( a , b ) => new Date ( b . date ) . getTime ( ) - new Date ( a . date ) . getTime ( ) ) ;
164+ const sortOrder = preferences . sortOrder ;
165+ combined . sort ( ( a , b ) => {
166+ const diff = new Date ( b . date ) . getTime ( ) - new Date ( a . date ) . getTime ( ) ;
167+ return sortOrder === 'newest' ? diff : - diff ;
168+ } ) ;
142169 return combined ;
143170 } ) ;
144171
0 commit comments