Use lists for room memberships

This commit is contained in:
Jon Staab
2024-10-08 15:30:18 -07:00
parent a351d9d792
commit 86c7e6f831
9 changed files with 88 additions and 98 deletions
+2 -2
View File
@@ -72,7 +72,7 @@
Object.assign(window, {get, ...app, ...state})
if (!db) {
await initStorage("flotilla", 4, {
ready = initStorage("flotilla", 4, {
events: storageAdapters.fromRepository(repository, {throttle: 300}),
relays: {keyPath: "url", store: throttled(1000, relays)},
handles: {keyPath: "nip05", store: throttled(1000, handles)},
@@ -80,7 +80,7 @@
freshness: storageAdapters.fromObjectStore(freshness, {throttle: 1000}),
plaintext: storageAdapters.fromObjectStore(plaintext, {throttle: 1000}),
tracker: storageAdapters.fromTracker(tracker, {throttle: 1000}),
})
}).then(() => sleep(300))
repository.on("update", ({added}) => {
for (const event of added) {
+2 -2
View File
@@ -6,7 +6,7 @@
import {createScroller} from "@lib/html"
import Icon from "@lib/components/Icon.svelte"
import {makeSpacePath} from "@app/routes"
import {userMembership, discoverRelays} from "@app/state"
import {userMembership, discoverRelays, getMembershipRoomsByUrl} from "@app/state"
let term = ""
let limit = 20
@@ -58,7 +58,7 @@
{/if}
</div>
</div>
{#if $userMembership?.roomsByUrl.has(relay.url)}
{#if getMembershipRoomsByUrl(relay.url, $userMembership)}
<div class="center absolute flex w-full">
<div
class="tooltip relative left-8 top-[38px] h-5 w-5 rounded-full bg-primary"
+7 -5
View File
@@ -1,11 +1,10 @@
<script lang="ts">
import {always} from "@welshman/lib"
import {getListTags, getPubkeyTagValues, MUTES} from "@welshman/util"
import {userMutes, tagPubkey} from "@welshman/app"
import {always, ctx} from "@welshman/lib"
import {getListTags, createEvent, getPubkeyTagValues, MUTES} from "@welshman/util"
import {userMutes, tagPubkey, publishThunk} from "@welshman/app"
import Field from "@lib/components/Field.svelte"
import Button from "@lib/components/Button.svelte"
import ProfileMultiSelect from "@app/components/ProfileMultiSelect.svelte"
import {updateList} from "@app/commands"
import {pushToast} from "@app/toast"
let mutedPubkeys = getPubkeyTagValues(getListTags($userMutes))
@@ -15,7 +14,10 @@
}
const onSubmit = async () => {
await updateList(MUTES, always(mutedPubkeys.map(tagPubkey)))
publishThunk({
event: createEvent(MUTES, {tags: mutedPubkeys.map(tagPubkey)}),
relays: ctx.app.router.WriteRelays().getUrls(),
})
pushToast({message: "Your settings have been saved!"})
}
+3 -3
View File
@@ -16,7 +16,7 @@
import SpaceExit from "@app/components/SpaceExit.svelte"
import SpaceJoin from "@app/components/SpaceJoin.svelte"
import RoomCreate from "@app/components/RoomCreate.svelte"
import {userMembership, pullConservatively, roomsByUrl, decodeNRelay, GENERAL, MESSAGE} from "@app/state"
import {getMembershipRoomsByUrl, userMembership, pullConservatively, roomsByUrl, decodeNRelay, GENERAL, MESSAGE} from "@app/state"
import {pushModal} from "@app/modal"
import {makeSpacePath} from "@app/routes"
@@ -48,7 +48,7 @@
let showMenu = false
$: url = decodeNRelay($page.params.nrelay)
$: rooms = sort($userMembership?.roomsByUrl?.get(url) || [])
$: rooms = getMembershipRoomsByUrl(url, $userMembership)
$: otherRooms = ($roomsByUrl.get(url) || []).filter(room => !rooms.concat(GENERAL).includes(room))
onMount(() => {
@@ -74,7 +74,7 @@
<ul
transition:fly
class="menu absolute z-popover mt-2 w-full rounded-box bg-base-100 p-2 shadow-xl">
{#if $userMembership?.roomsByUrl.has(url)}
{#if getMembershipRoomsByUrl(url, $userMembership)}
<li class="text-error">
<Button on:click={leaveSpace}>
<Icon icon="exit" />
@@ -28,6 +28,7 @@
GENERAL,
tagRoom,
MESSAGE,
getMembershipRoomsByUrl,
} from "@app/state"
import {addRoomMembership, removeRoomMembership} from "@app/commands"
@@ -46,8 +47,6 @@
let loading = true
let elements: Element[] = []
$: membership = $userMembership?.roomsByUrl.get(url) || []
$: {
elements = []
@@ -90,7 +89,7 @@
<strong>{room}</strong>
</div>
{#if room !== GENERAL}
{#if membership.includes(room)}
{#if getMembershipRoomsByUrl(url, $userMembership).includes(room)}
<Button class="btn btn-neutral btn-sm" on:click={() => removeRoomMembership(url, room)}>
<Icon icon="arrows-a-logout-2" />
Leave Room