diff --git a/src/components/MailboxSetting/SaveButton.tsx b/src/components/MailboxSetting/SaveButton.tsx index 221b9adf..6cd84ea5 100644 --- a/src/components/MailboxSetting/SaveButton.tsx +++ b/src/components/MailboxSetting/SaveButton.tsx @@ -24,8 +24,11 @@ export default function SaveButton({ setPushing(true) const event = createRelayListDraftEvent(mailboxRelays) + console.log('Saving mailbox relays:', event) const relayListEvent = await publish(event) + console.log('Published relay list event:', relayListEvent) await updateRelayListEvent(relayListEvent) + toast({ title: 'Save Successful', description: 'Successfully saved mailbox relays' diff --git a/src/providers/NostrProvider/index.tsx b/src/providers/NostrProvider/index.tsx index 6ec47bfc..e01d4c91 100644 --- a/src/providers/NostrProvider/index.tsx +++ b/src/providers/NostrProvider/index.tsx @@ -172,9 +172,7 @@ export function NostrProvider({ children }: { children: React.ReactNode }) { indexedDb.getReplaceableEvent(account.pubkey, ExtendedKind.FAVORITE_RELAYS) ]) if (storedRelayListEvent) { - setRelayList( - storedRelayListEvent ? getRelayListFromRelayListEvent(storedRelayListEvent) : null - ) + setRelayList(getRelayListFromRelayListEvent(storedRelayListEvent)) } if (storedProfileEvent) { setProfileEvent(storedProfileEvent) diff --git a/src/services/indexed-db.service.ts b/src/services/indexed-db.service.ts index caded0b0..13f50d0c 100644 --- a/src/services/indexed-db.service.ts +++ b/src/services/indexed-db.service.ts @@ -4,7 +4,7 @@ import { Event, kinds } from 'nostr-tools' type TValue = { key: string - value: T + value: T | null addedAt: number } @@ -140,7 +140,7 @@ class IndexedDbService { const getRequest = store.get(key) getRequest.onsuccess = () => { const oldValue = getRequest.result as TValue | undefined - if (oldValue && oldValue.value.created_at >= event.created_at) { + if (oldValue?.value && oldValue.value.created_at >= event.created_at) { transaction.commit() return resolve(oldValue.value) } @@ -163,7 +163,11 @@ class IndexedDbService { }) } - async getReplaceableEvent(pubkey: string, kind: number, d?: string): Promise { + async getReplaceableEvent( + pubkey: string, + kind: number, + d?: string + ): Promise { const storeName = this.getStoreNameByKind(kind) if (!storeName) { return Promise.reject('store name not found') @@ -232,7 +236,7 @@ class IndexedDbService { }) } - async getMuteDecryptedTags(id: string): Promise { + async getMuteDecryptedTags(id: string): Promise { await this.initPromise return new Promise((resolve, reject) => { if (!this.db) { @@ -288,7 +292,11 @@ class IndexedDbService { request.onsuccess = () => { transaction.commit() - resolve((request.result as TValue[])?.map((item) => item.value)) + resolve( + ((request.result as TValue[]) + ?.map((item) => item.value) + .filter(Boolean) as Event[]) ?? [] + ) } request.onerror = (event) => { @@ -337,7 +345,10 @@ class IndexedDbService { request.onsuccess = (event) => { const cursor = (event.target as IDBRequest).result if (cursor) { - callback((cursor.value as TValue).value) + const value = (cursor.value as TValue).value + if (value) { + callback(value) + } cursor.continue() } else { transaction.commit()