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>
|
<mat-progress-bar *ngIf="events == null" mode="indeterminate"></mat-progress-bar>
|
||||||
|
|
||||||
<div class="page loading-container" *ngIf="!profileService.initialized">
|
<div class="page loading-container" *ngIf="!profileService.initialized">
|
||||||
@ -65,6 +65,8 @@
|
|||||||
<mat-panel-description>{{ activeOptions() }}</mat-panel-description>
|
<mat-panel-description>{{ activeOptions() }}</mat-panel-description>
|
||||||
</mat-expansion-panel-header>
|
</mat-expansion-panel-header>
|
||||||
<p>
|
<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.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.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>
|
<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[]>([]);
|
#filteredEventsChanged: BehaviorSubject<NostrEventDocument[]> = new BehaviorSubject<NostrEventDocument[]>([]);
|
||||||
|
|
||||||
|
#threadedEventsChanged: BehaviorSubject<NostrEventDocument[]> = new BehaviorSubject<NostrEventDocument[]>([]);
|
||||||
|
|
||||||
sortSubject = new BehaviorSubject<'asc' | 'desc'>('asc');
|
sortSubject = new BehaviorSubject<'asc' | 'desc'>('asc');
|
||||||
sort$ = this.sortSubject.asObservable();
|
sort$ = this.sortSubject.asObservable();
|
||||||
sortOrder: 'asc' | 'desc' = 'asc';
|
sortOrder: 'asc' | 'desc' = 'asc';
|
||||||
@ -37,6 +39,35 @@ export class FeedService {
|
|||||||
// return this.#eventsChanged.asObservable();
|
// 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[]> {
|
get filteredEvents$(): Observable<NostrEventDocument[]> {
|
||||||
// combineLatest([this.sort$, this.events$])
|
// combineLatest([this.sort$, this.events$])
|
||||||
// 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() {
|
#updated() {
|
||||||
this.#eventsChanged.next(this.events);
|
this.#eventsChanged.next(this.events);
|
||||||
this.#filteredEventsChanged.next(this.events);
|
this.#filteredEventsChanged.next(this.events);
|
||||||
|
this.#threadedEventsChanged.next(this.events);
|
||||||
}
|
}
|
||||||
|
|
||||||
async #persist(event: NostrEventDocument) {
|
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() {
|
scheduleProfileDownload() {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
console.log('scheduleProfileDownload:setTimeout');
|
console.log('scheduleProfileDownload:setTimeout');
|
||||||
|
@ -6,6 +6,8 @@ export interface Options {
|
|||||||
paused?: boolean;
|
paused?: boolean;
|
||||||
privateFeed?: boolean;
|
privateFeed?: boolean;
|
||||||
publicFeed?: boolean;
|
publicFeed?: boolean;
|
||||||
|
flatfeed?: boolean;
|
||||||
|
ascending?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
|
Loading…
Reference in New Issue
Block a user