Add user settings

This commit is contained in:
Jon Staab
2024-10-17 15:46:26 -07:00
parent defb16aa1c
commit b4baef215a
4 changed files with 70 additions and 8 deletions
+2 -1
View File
@@ -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),
+4 -2
View File
@@ -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
+49
View File
@@ -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