forked from coracle/flotilla
Work on login screen
This commit is contained in:
+50
-11
@@ -1,27 +1,66 @@
|
||||
import {writable, derived} from "svelte/store"
|
||||
import {pushToMapKey, indexBy} from "@welshman/lib"
|
||||
import {getIdentifier, GROUP_META, GROUPS, getGroupTagValues} from "@welshman/util"
|
||||
import {getIdentifier, getPubkeyTagValues, GROUP_META, PROFILE, FOLLOWS, MUTES, GROUPS, getGroupTagValues} from "@welshman/util"
|
||||
import {deriveEvents} from "@welshman/store"
|
||||
import {repository} from "@app/base"
|
||||
import {getGroupUrl, GROUP_DELIMITER} from "@app/domain"
|
||||
|
||||
export const pk = writable<string | null>(null)
|
||||
|
||||
export const sessions = writable(new Map())
|
||||
|
||||
export const session = derived([pk, sessions], ([$pk, $sessions]) => $sessions.get($pk))
|
||||
import {synced, parseJson} from '@lib/util'
|
||||
import type {Session} from '@app/types'
|
||||
import {repository, pk} from "@app/base"
|
||||
import {getGroupNom, getGroupUrl, getGroupName, getGroupPicture, GROUP_DELIMITER} from "@app/domain"
|
||||
|
||||
export const relayInfo = writable(new Map())
|
||||
|
||||
export const handleInfo = writable(new Map())
|
||||
|
||||
export const profileEvents = deriveEvents(repository, {
|
||||
filters: [{kinds: [PROFILE]}],
|
||||
})
|
||||
|
||||
export const profiles = derived(profileEvents, $profileEvents =>
|
||||
$profileEvents.map(event => ({...parseJson(event.content), event}))
|
||||
)
|
||||
|
||||
export const profilesByPubkey = derived(profiles, $profiles => indexBy(profile => profile.event.pubkey, $profiles))
|
||||
|
||||
export const deriveProfile = (pubkey: string) => derived(profilesByPubkey, $m => $m.get(pubkey))
|
||||
|
||||
export const followEvents = deriveEvents(repository, {
|
||||
filters: [{kinds: [FOLLOWS]}],
|
||||
})
|
||||
|
||||
export const follows = derived(followEvents, $followEvents =>
|
||||
$followEvents.map(event => ({pubkeys: new Set(getPubkeyTagValues(event.tags)), event}))
|
||||
)
|
||||
|
||||
export const followsByPubkey = derived(follows, $follows => indexBy(follow => follow.event.pubkey, $follows))
|
||||
|
||||
export const muteEvents = deriveEvents(repository, {
|
||||
filters: [{kinds: [MUTES]}],
|
||||
})
|
||||
|
||||
export const mutes = derived(muteEvents, $muteEvents =>
|
||||
$muteEvents.map(event => ({pubkeys: new Set(getPubkeyTagValues(event.tags)), event}))
|
||||
)
|
||||
|
||||
export const mutesByPubkey = derived(mutes, $mutes => indexBy(mute => mute.event.pubkey, $mutes))
|
||||
|
||||
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),
|
||||
$groupEvents
|
||||
.map(event => ({
|
||||
event,
|
||||
id: getIdentifier(event),
|
||||
nom: getGroupNom(event),
|
||||
url: getGroupUrl(event),
|
||||
name: getGroupName(event),
|
||||
picture: getGroupPicture(event),
|
||||
}))
|
||||
.filter(group => $relayInfo.get(group.url)?.pubkey === group.event.pubkey)
|
||||
)
|
||||
|
||||
export const groupsById = derived(groups, $groups => indexBy(getIdentifier, $groups))
|
||||
export const groupsById = derived(groups, $groups => indexBy(group => group.id, $groups))
|
||||
|
||||
export const groupsEvents = deriveEvents(repository, {
|
||||
filters: [{kinds: [GROUPS]}],
|
||||
|
||||
Reference in New Issue
Block a user