mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
fix(feed): unblock multiboard directories with public key fallback
This commit is contained in:
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user