fix(feed): unblock multiboard directories with public key fallback

This commit is contained in:
Tommaso Casaburi
2026-04-13 16:24:42 +07:00
parent 6c72c336fa
commit fea7b8ea10
3 changed files with 19 additions and 14 deletions
+12 -1
View File
@@ -53,6 +53,7 @@ let cacheCommunities: DirectoryCommunity[] | null = null;
let cacheMetadata: DirectoriesMetadata | null = null;
let inFlightGitHubFetch: Promise<DirectoriesData> | null = null;
const DIRECTORY_ALIAS_SUFFIXES = ['.bso', '.eth'] as const;
const MULTIBOARD_PUBLIC_KEY_FALLBACK_NAMES = new Set(['business-and-finance.bso', 'politically-incorrect.bso']);
// Exposed for deterministic unit tests around module-level cache state.
export const __resetDirectoriesModuleStateForTests = () => {
@@ -96,6 +97,14 @@ const getDirectoryIdentifiers = (community: DirectoryCommunity): string[] => [
...new Set([community.address, community.name, community.publicKey].filter((value): value is string => typeof value === 'string' && value.length > 0)),
];
export const getDirectoryFetchAddress = (community: DirectoryCommunity): string => {
if (community.name && MULTIBOARD_PUBLIC_KEY_FALLBACK_NAMES.has(community.name) && community.publicKey) {
return community.publicKey;
}
return community.address;
};
const toCanonicalCommunity = (value: {
address?: unknown;
communityAddress?: unknown;
@@ -464,7 +473,9 @@ export const useDirectoriesState = () => {
export const useDirectoryAddresses = () => {
const directories = useDirectories();
return useMemo(() => (Array.isArray(directories) ? directories.map((community) => community.address) : []), [directories]);
const directoryAddresses = useMemo(() => (Array.isArray(directories) ? directories.map((community) => getDirectoryFetchAddress(community)) : []), [directories]);
return directoryAddresses;
};
export const useDirectoryByAddress = (address: string | undefined) => {
@@ -1,19 +1,21 @@
import { useMemo } from 'react';
import { useDirectories } from './use-directories';
import { getDirectoryFetchAddress, useDirectories } from './use-directories';
import useAllFeedFilterStore from '../stores/use-all-feed-filter-store';
export const useFilteredDirectoryAddresses = () => {
const directories = useDirectories();
const { filter } = useAllFeedFilterStore();
return useMemo(() => {
const filteredAddresses = useMemo(() => {
if (filter === 'all') {
return directories.map((community) => community.address);
return directories.map((community) => getDirectoryFetchAddress(community));
}
if (filter === 'nsfw') {
return directories.filter((community) => community.nsfw === true).map((community) => community.address);
return directories.filter((community) => community.nsfw === true).map((community) => getDirectoryFetchAddress(community));
}
// filter === 'sfw'
return directories.filter((community) => community.nsfw !== true).map((community) => community.address);
return directories.filter((community) => community.nsfw !== true).map((community) => getDirectoryFetchAddress(community));
}, [directories, filter]);
return filteredAddresses;
};
-8
View File
@@ -178,14 +178,6 @@ export const useFeedStateString = (communityAddresses?: string[]): string | unde
stateString += ' via IPFS';
}
if (!stateString && communityAddresses?.length) {
const count = communityAddresses.length;
stateString = `downloading ${count} ${count === 1 ? 'board' : 'boards'}`;
if (count <= 5) {
stateString += ` (${communityAddresses.map((a) => getShortAddress(a) || a).join(', ')})`;
}
}
// capitalize first letter
stateString = stateString.charAt(0).toUpperCase() + stateString.slice(1);