mirror of
https://github.com/block-core/blockcore-notes.git
synced 2024-09-29 14:30:43 +00:00
Add feed option for sorting and flat/thread feed
This commit is contained in:
parent
c730188cf4
commit
ca38fa0f7e
@ -1,4 +1,4 @@
|
||||
<span *ngIf="feedService.filteredEvents$ | async as events">
|
||||
<span *ngIf="feedService.threadedEvents$ | async as events">
|
||||
<mat-progress-bar *ngIf="events == null" mode="indeterminate"></mat-progress-bar>
|
||||
|
||||
<div class="page loading-container" *ngIf="!profileService.initialized">
|
||||
@ -65,6 +65,8 @@
|
||||
<mat-panel-description>{{ activeOptions() }}</mat-panel-description>
|
||||
</mat-expansion-panel-header>
|
||||
<p>
|
||||
<mat-slide-toggle class="options-slider" [(ngModel)]="settings.options.flatfeed" (ngModelChange)="optionsUpdated()">Flat Feed (turn off threads)</mat-slide-toggle>
|
||||
<mat-slide-toggle class="options-slider" [(ngModel)]="settings.options.ascending" (ngModelChange)="optionsUpdated()">Oldest first</mat-slide-toggle>
|
||||
<mat-slide-toggle class="options-slider" [(ngModel)]="settings.options.paused">Pause feed</mat-slide-toggle>
|
||||
<mat-slide-toggle class="options-slider" [(ngModel)]="settings.options.hideSpam" (ngModelChange)="optionsUpdated()">Hide spam</mat-slide-toggle>
|
||||
<mat-slide-toggle class="options-slider" [(ngModel)]="settings.options.hideInvoice" (ngModelChange)="optionsUpdated()">Hide LN invoices</mat-slide-toggle>
|
||||
|
@ -24,6 +24,8 @@ export class FeedService {
|
||||
|
||||
#filteredEventsChanged: BehaviorSubject<NostrEventDocument[]> = new BehaviorSubject<NostrEventDocument[]>([]);
|
||||
|
||||
#threadedEventsChanged: BehaviorSubject<NostrEventDocument[]> = new BehaviorSubject<NostrEventDocument[]>([]);
|
||||
|
||||
sortSubject = new BehaviorSubject<'asc' | 'desc'>('asc');
|
||||
sort$ = this.sortSubject.asObservable();
|
||||
sortOrder: 'asc' | 'desc' = 'asc';
|
||||
@ -37,6 +39,35 @@ export class FeedService {
|
||||
// return this.#eventsChanged.asObservable();
|
||||
// }
|
||||
|
||||
get threadedEvents$(): Observable<NostrEventDocument[]> {
|
||||
return this.#threadedEventsChanged
|
||||
.asObservable()
|
||||
.pipe(
|
||||
map((data) => {
|
||||
if (this.settings.options.flatfeed) {
|
||||
return data;
|
||||
// return data.filter((events) => !events.tags.find((t) => t[0] === 'e'));
|
||||
} else {
|
||||
return data.filter((events) => !events.tags.find((t) => t[0] === 'e'));
|
||||
}
|
||||
})
|
||||
) // If there is any 'e' tags then skip.
|
||||
.pipe(map((data) => data.filter((events) => !this.profileService.blockedPublickKeys().includes(events.pubkey) && !this.profileService.mutedPublicKeys().includes(events.pubkey))))
|
||||
.pipe(
|
||||
map((data) => {
|
||||
data.sort((a, b) => {
|
||||
if (this.settings.options.ascending) {
|
||||
return a.created_at < b.created_at ? -1 : 1;
|
||||
} else {
|
||||
return a.created_at > b.created_at ? -1 : 1;
|
||||
}
|
||||
});
|
||||
|
||||
return data;
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
get filteredEvents$(): Observable<NostrEventDocument[]> {
|
||||
// combineLatest([this.sort$, this.events$])
|
||||
// combineLatest([this.sort$, this.events$])
|
||||
@ -67,9 +98,15 @@ export class FeedService {
|
||||
);
|
||||
}
|
||||
|
||||
constructor(private settings: SettingsService, private eventService: EventService, private validator: DataValidation, private storage: StorageService, private profileService: ProfileService, private circlesService: CirclesService) {
|
||||
console.log('FEED SERVICE CONSTRUCTOR!');
|
||||
this.#table = this.storage.table<NostrEventDocument>('events');
|
||||
}
|
||||
|
||||
#updated() {
|
||||
this.#eventsChanged.next(this.events);
|
||||
this.#filteredEventsChanged.next(this.events);
|
||||
this.#threadedEventsChanged.next(this.events);
|
||||
}
|
||||
|
||||
async #persist(event: NostrEventDocument) {
|
||||
@ -134,11 +171,6 @@ export class FeedService {
|
||||
});
|
||||
}
|
||||
|
||||
constructor(private eventService: EventService, private validator: DataValidation, private storage: StorageService, private profileService: ProfileService, private circlesService: CirclesService) {
|
||||
console.log('FEED SERVICE CONSTRUCTOR!');
|
||||
this.#table = this.storage.table<NostrEventDocument>('events');
|
||||
}
|
||||
|
||||
scheduleProfileDownload() {
|
||||
setTimeout(() => {
|
||||
console.log('scheduleProfileDownload:setTimeout');
|
||||
|
@ -6,6 +6,8 @@ export interface Options {
|
||||
paused?: boolean;
|
||||
privateFeed?: boolean;
|
||||
publicFeed?: boolean;
|
||||
flatfeed?: boolean;
|
||||
ascending?: boolean;
|
||||
}
|
||||
|
||||
@Injectable({
|
||||
|
Loading…
Reference in New Issue
Block a user