diff --git a/src/app/components/RoomDetail.svelte b/src/app/components/RoomDetail.svelte index 3115b3d5..03378fd5 100644 --- a/src/app/components/RoomDetail.svelte +++ b/src/app/components/RoomDetail.svelte @@ -122,6 +122,7 @@ repository.removeEvent(thunk.event.id) pushToast({theme: "error", message}) } else { + await removeRoomMembership(url, h) goto(makeSpacePath(url)) } }, diff --git a/src/app/core/state.ts b/src/app/core/state.ts index 0496d655..a6e8249e 100644 --- a/src/app/core/state.ts +++ b/src/app/core/state.ts @@ -5,7 +5,7 @@ import {derived, readable, writable} from "svelte/store" import * as nip19 from "nostr-tools/nip19" import { on, - gt, + gte, max, spec, call, @@ -596,6 +596,9 @@ export const splitRoomId = (id: string) => id.split("'") export const hasNip29 = (relay?: RelayProfile) => Boolean(relay?.supported_nips?.map?.(String)?.includes?.("29")) +const getRoomDeleteId = (event: TrustedEvent) => + getTagValue("h", event.tags) || getTagValue("d", event.tags) + export const roomMetaEventsByIdByUrl = deriveEventsByIdByUrl({ tracker, repository, @@ -610,7 +613,9 @@ export const roomsByUrl = derived(roomMetaEventsByIdByUrl, roomMetaEventsByIdByU const deletedByH = new Map() for (const event of deleteEvents) { - for (const h of getTagValues("h", event.tags)) { + const h = getRoomDeleteId(event) + + if (h) { deletedByH.set(h, max([deletedByH.get(h), event.created_at])) } } @@ -620,7 +625,7 @@ export const roomsByUrl = derived(roomMetaEventsByIdByUrl, roomMetaEventsByIdByU for (const event of metaEvents) { const meta = tryCatch(() => readRoomMeta(event)) - if (!meta || gt(deletedByH.get(meta.h), meta.event.created_at)) { + if (!meta || gte(deletedByH.get(meta.h), meta.event.created_at)) { continue } @@ -651,7 +656,10 @@ export const loadRoom = call(() => { await load({ relays: [url], - filters: [{kinds: [ROOM_META], "#d": [h]}], + filters: [ + {kinds: [ROOM_META], "#d": [h]}, + {kinds: [ROOM_DELETE], "#h": [h]}, + ], }) }