forked from coracle/flotilla
Add user settings
This commit is contained in:
+2
-1
@@ -45,7 +45,7 @@ import {
|
||||
nip44EncryptToSelf,
|
||||
loadRelay,
|
||||
} from "@welshman/app"
|
||||
import {tagRoom, userMembership, MEMBERSHIPS, INDEXER_RELAYS, loadMembership} from "@app/state"
|
||||
import {tagRoom, userMembership, MEMBERSHIPS, INDEXER_RELAYS, loadMembership, loadSettings} from "@app/state"
|
||||
|
||||
// Utils
|
||||
|
||||
@@ -86,6 +86,7 @@ export const loadUserData = (
|
||||
const promise = Promise.all([
|
||||
loadInboxRelaySelections(pubkey, request),
|
||||
loadMembership(pubkey, request),
|
||||
loadSettings(pubkey, request),
|
||||
loadProfile(pubkey, request),
|
||||
loadFollows(pubkey, request),
|
||||
loadMutes(pubkey, request),
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
import ContentQuote from "@app/components/ContentQuote.svelte"
|
||||
import ContentTopic from "@app/components/ContentTopic.svelte"
|
||||
import ContentMention from "@app/components/ContentMention.svelte"
|
||||
import {entityLink} from "@app/state"
|
||||
import {entityLink, userSettings} from "@app/state"
|
||||
|
||||
export let event
|
||||
export let minLength = 500
|
||||
@@ -69,7 +69,9 @@
|
||||
warning = null
|
||||
}
|
||||
|
||||
let warning = event.tags.find(nthEq(0, "content-warning"))?.[1]
|
||||
let warning =
|
||||
$userSettings?.values.hide_sensitive &&
|
||||
event.tags.find(nthEq(0, "content-warning"))?.[1]
|
||||
|
||||
$: shortContent = showEntire
|
||||
? fullContent
|
||||
|
||||
@@ -15,11 +15,13 @@ import {
|
||||
pushToMapKey,
|
||||
nthEq,
|
||||
shuffle,
|
||||
parseJson,
|
||||
} from "@welshman/lib"
|
||||
import {
|
||||
getIdFilters,
|
||||
WRAP,
|
||||
RELAYS,
|
||||
APP_DATA,
|
||||
REACTION,
|
||||
ZAP_RESPONSE,
|
||||
DIRECT_MESSAGE,
|
||||
@@ -56,6 +58,7 @@ import {
|
||||
pull,
|
||||
createSearch,
|
||||
userFollows,
|
||||
ensurePlaintext,
|
||||
} from "@welshman/app"
|
||||
import type {AppSyncOpts} from "@welshman/app"
|
||||
import type {SubscribeRequestWithHandlers} from "@welshman/net"
|
||||
@@ -240,6 +243,42 @@ export const deriveEventsForUrl = (url: string, kinds: number[]) =>
|
||||
),
|
||||
)
|
||||
|
||||
// Settings
|
||||
|
||||
export const SETTINGS = "nostr-engine/User/settings/v1"
|
||||
|
||||
export type Settings = {
|
||||
event: TrustedEvent,
|
||||
values: {
|
||||
hide_sensitive: boolean
|
||||
},
|
||||
}
|
||||
|
||||
export const defaultSettings = {
|
||||
hide_sensitive: true,
|
||||
}
|
||||
|
||||
export const settings = deriveEventsMapped<Settings>(repository, {
|
||||
filters: [{kinds: [APP_DATA], '#d': [SETTINGS]}],
|
||||
itemToEvent: item => item.event,
|
||||
eventToItem: async (event: TrustedEvent) =>
|
||||
({event, values: {...defaultSettings, ...parseJson(await ensurePlaintext(event))}})
|
||||
})
|
||||
|
||||
export const {
|
||||
indexStore: settingsByPubkey,
|
||||
deriveItem: deriveSettings,
|
||||
loadItem: loadSettings,
|
||||
} = collection({
|
||||
name: "settings",
|
||||
store: settings,
|
||||
getKey: settings => settings.event.pubkey,
|
||||
load: (pubkey: string, request: Partial<SubscribeRequestWithHandlers> = {}) =>
|
||||
load({...request, filters: [{kinds: [APP_DATA], '#d': [SETTINGS], authors: [pubkey]}]}),
|
||||
})
|
||||
|
||||
|
||||
|
||||
// Membership
|
||||
|
||||
export const getMembershipUrls = (list?: List) => sort(getRelayTagValues(getListTags(list)))
|
||||
@@ -418,6 +457,16 @@ export const roomsByUrl = derived(channels, $channels => {
|
||||
|
||||
// User stuff
|
||||
|
||||
export const userSettings = withGetter(
|
||||
derived([pubkey, settingsByPubkey], ([$pubkey, $settingsByPubkey]) => {
|
||||
if (!$pubkey) return undefined
|
||||
|
||||
loadSettings($pubkey)
|
||||
|
||||
return $settingsByPubkey.get($pubkey)
|
||||
}),
|
||||
)
|
||||
|
||||
export const userMembership = withGetter(
|
||||
derived([pubkey, membershipByPubkey], ([$pubkey, $membershipByPubkey]) => {
|
||||
if (!$pubkey) return undefined
|
||||
|
||||
Reference in New Issue
Block a user