diff --git a/src/components/ModsFilter.tsx b/src/components/ModsFilter.tsx index 806fabe..6e0342d 100644 --- a/src/components/ModsFilter.tsx +++ b/src/components/ModsFilter.tsx @@ -110,7 +110,7 @@ export const ModFilter = React.memo( data-bs-toggle='dropdown' type='button' > - {filterOptions.wot} + Trust: {filterOptions.wot}
{Object.values(WOTFilterOptions).map((item, index) => { diff --git a/src/hooks/useFilteredMods.ts b/src/hooks/useFilteredMods.ts index 7c46c76..5530b0d 100644 --- a/src/hooks/useFilteredMods.ts +++ b/src/hooks/useFilteredMods.ts @@ -54,18 +54,29 @@ export const useFilteredMods = ( } const wotFilter = (mods: ModDetails[]) => { - // Determine the filtering logic based on the WOT filter option + // Determine the filtering logic based on the WOT filter option and user state + // when user is not logged in use Site_Only + if (!userState.auth) { + return mods.filter((mod) => isInWoT(siteWot, siteWotLevel, mod.author)) + } + // when user is logged, allow other filter selections + const isWoTNpub = + userState.user?.npub === import.meta.env.VITE_SITE_WOT_NPUB switch (filterOptions.wot) { case WOTFilterOptions.None: - return mods + // Only admins can choose None, use siteWoT for others + return isWoTNpub + ? mods + : mods.filter((mod) => isInWoT(siteWot, siteWotLevel, mod.author)) case WOTFilterOptions.Site_Only: return mods.filter((mod) => isInWoT(siteWot, siteWotLevel, mod.author) ) case WOTFilterOptions.Mine_Only: - return mods.filter((mod) => - isInWoT(userWot, userWotLevel, mod.author) - ) + // Only admins can choose Mine_Only, use siteWoT for others + return isWoTNpub + ? mods.filter((mod) => isInWoT(userWot, userWotLevel, mod.author)) + : mods.filter((mod) => isInWoT(siteWot, siteWotLevel, mod.author)) case WOTFilterOptions.Site_And_Mine: return mods.filter( (mod) => @@ -112,6 +123,7 @@ export const useFilteredMods = ( return filtered }, [ + userState.auth, userState.user?.npub, filterOptions.sort, filterOptions.moderated, diff --git a/src/pages/settings/preference.tsx b/src/pages/settings/preference.tsx index cb41186..69e3d12 100644 --- a/src/pages/settings/preference.tsx +++ b/src/pages/settings/preference.tsx @@ -4,9 +4,9 @@ import { useAppDispatch, useAppSelector, useNDKContext } from 'hooks' import { kinds, UnsignedEvent, Event } from 'nostr-tools' import { useEffect, useState } from 'react' import { toast } from 'react-toastify' -import { setUserWotLevel } from 'store/reducers/wot' +import { setSiteWotLevel, setUserWotLevel } from 'store/reducers/wot' import { UserRelaysType } from 'types' -import { log, LogType, now } from 'utils' +import { log, LogType, now, npubToHex } from 'utils' // todo: use components from Input.tsx export const PreferencesSetting = () => { @@ -92,6 +92,13 @@ export const PreferencesSetting = () => { ) dispatch(setUserWotLevel(wotLevel)) + + // If wot admin, update site wot level too + const SITE_WOT_NPUB = import.meta.env.VITE_SITE_WOT_NPUB + const siteWotPubkey = npubToHex(SITE_WOT_NPUB) + if (siteWotPubkey === hexPubkey) { + dispatch(setSiteWotLevel(wotLevel)) + } }) .catch((err) => { console.error(err) diff --git a/src/utils/wot.ts b/src/utils/wot.ts index be3b481..fa8bcd0 100644 --- a/src/utils/wot.ts +++ b/src/utils/wot.ts @@ -98,9 +98,7 @@ export const findFollowsAndMuteUsers = async ( follows.add(f) }) } - }) - events.forEach((event) => { if (event.kind === NDKKind.MuteList) { filterValidPTags(event.tags).forEach((f) => { muted.add(f)