Add some state management stuff
This commit is contained in:
+43
-9
@@ -1,10 +1,44 @@
|
||||
import {readable} from "svelte/store"
|
||||
import {writable, derived} from "svelte/store"
|
||||
import {pushToMapKey, indexBy} from "@welshman/lib"
|
||||
import {getIdentifier, GROUP_META, GROUPS, getGroupTagValues} from "@welshman/util"
|
||||
import {deriveEvents} from "@welshman/store"
|
||||
import {repository} from "@app/base"
|
||||
import {getGroupUrl, GROUP_DELIMITER} from "@app/domain"
|
||||
|
||||
export const spaces = readable([
|
||||
{
|
||||
id: "test",
|
||||
name: "Test",
|
||||
picture:
|
||||
"https://images.unsplash.com/photo-1721853046219-209921be684e?w=800&auto=format&fit=crop&q=60&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxmZWF0dXJlZC1waG90b3MtZmVlZHw0fHx8ZW58MHx8fHx8",
|
||||
},
|
||||
])
|
||||
export const pk = writable<string | null>(null)
|
||||
|
||||
export const sessions = writable(new Map())
|
||||
|
||||
export const session = derived([pk, sessions], ([$pk, $sessions]) => $sessions.get($pk))
|
||||
|
||||
export const relayInfo = writable(new Map())
|
||||
|
||||
export const groupEvents = deriveEvents(repository, {
|
||||
filters: [{kinds: [GROUP_META]}],
|
||||
})
|
||||
|
||||
export const groups = derived([relayInfo, groupEvents], ([$relayInfo, $groupEvents]) =>
|
||||
$groupEvents.filter(e => $relayInfo.get(getGroupUrl(e))?.pubkey === e.pubkey),
|
||||
)
|
||||
|
||||
export const groupsById = derived(groups, $groups => indexBy(getIdentifier, $groups))
|
||||
|
||||
export const groupsEvents = deriveEvents(repository, {
|
||||
filters: [{kinds: [GROUPS]}],
|
||||
})
|
||||
|
||||
export const userGroupsEvent = derived([pk, groupsEvents], ([$pk, $groupsEvents]) =>
|
||||
$groupsEvents.find(e => e.pubkey === $pk),
|
||||
)
|
||||
|
||||
export const userGroupRelaysByNom = derived(userGroupsEvent, $userGroupsEvent => {
|
||||
const relaysByNom = new Map()
|
||||
|
||||
for (const id of getGroupTagValues($userGroupsEvent?.tags || [])) {
|
||||
const [relay, nom] = id.split(GROUP_DELIMITER)
|
||||
|
||||
pushToMapKey(relaysByNom, nom, relay)
|
||||
}
|
||||
|
||||
return relaysByNom
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user