forked from coracle/flotilla
Use lists for room memberships
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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!"})
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user