Merge branch 'new-state-management' of https://github.com/block-core/blockcore-notes into new-state-management

This commit is contained in:
SondreB 2023-05-02 19:10:44 +02:00
commit 736011bc05
No known key found for this signature in database
GPG Key ID: D6CC44C75005FDBF
3 changed files with 77 additions and 3 deletions

View File

@ -28,6 +28,7 @@ import { LabelService } from './services/label';
import { TranslateService } from '@ngx-translate/core';
import { BadgeService } from './services/badge';
import { State } from './services/state';
import { EventService } from './services/event';
@Component({
selector: 'app-root',
@ -68,7 +69,8 @@ export class AppComponent {
private bottomSheet: MatBottomSheet,
public searchService: SearchService,
public theme: ThemeService,
private state: State
private state: State,
private eventService: EventService
) {
if (!this.visibilityHandler) {
this.visibilityHandler = addEventListener('visibilitychange', (event) => {

View File

@ -40,6 +40,46 @@
</mat-list-item>
<mat-divider></mat-divider>
</mat-list>
<mat-list >
<div mat-subheader>Reposts</div>
<mat-list-item *ngFor="let state of state.events.reposts| keyvalue">
<mat-icon matListItemIcon>folder</mat-icon>
<div matListItemTitle>{{state.key}}</div>
<div matListItemLine>{{state.value.content}}</div>
</mat-list-item>
<mat-divider></mat-divider>
</mat-list>
<mat-list >
<div mat-subheader>Zap</div>
<mat-list-item *ngFor="let state of state.events.zap | keyvalue">
<mat-icon matListItemIcon>folder</mat-icon>
<div matListItemTitle>{{state.key}}</div>
<div matListItemLine>{{state.value.content}}</div>
</mat-list-item>
<mat-divider></mat-divider>
</mat-list>
<mat-list >
<div mat-subheader>Zap Request</div>
<mat-list-item *ngFor="let state of state.events.zapRequest| keyvalue">
<mat-icon matListItemIcon>folder</mat-icon>
<div matListItemTitle>{{state.key}}</div>
<div matListItemLine>{{state.value.content}}</div>
</mat-list-item>
<mat-divider></mat-divider>
</mat-list>
<mat-list >
<div mat-subheader>Article</div>
<mat-list-item *ngFor="let state of state.events.longFormContent | keyvalue">
<mat-icon matListItemIcon>folder</mat-icon>
<div matListItemTitle>{{state.key}}</div>
<div matListItemLine>{{state.value.content}}</div>
</mat-list-item>
<mat-divider></mat-divider>
</mat-list>

View File

@ -10,7 +10,7 @@ export class StateService {
addEvent(event: NostrEvent) {
// TODO: Temporarily removed to avoid building massive in-memory state.
switch (event.kind) {
switch (event.kind as any) {
case Kind.Metadata:
this.addIfNewer(event, event.pubkey, this.state.events.metadata);
if (this.state.pubkey == event.pubkey) {
@ -24,11 +24,43 @@ export class StateService {
this.addIfNewer(event, event.pubkey, this.state.events.contacts);
break;
case Kind.Reaction:
this.addIfNewer(event, event.content, this.state.events.reaction);
this.addIfMissing(event, this.state.events.reaction);
break;
case 6:
this.addIfMissing(event, this.state.events.reposts);
break;
case Kind.Zap:
this.addIfMissing(event, this.state.events.zap);
break;
case Kind.ZapRequest:
this.addIfMissing(event, this.state.events.zapRequest);
break;
case Kind.Article:
const slug = this.firstDTag(event);
this.addIfNewer(event, slug!, this.state.events.longFormContent);
break;
}
}
tagsOfType(event: NostrEvent | null, type: string) {
if (!event) {
return [];
}
const tags = event.tags.filter((t) => t[0] === type);
return tags;
}
firstDTag(event: NostrEvent | null | any) {
const tags = this.tagsOfType(event, 'd');
if (tags.length == 0) {
return undefined;
}
return tags[0][1];
}
addIfMissing(event: NostrEvent, map: Map<string, NostrEvent>) {
if (map.has(event.id)) {
return;