Files
5chan/src/hooks/use-community-identifiers.ts
T
Tommaso CasaburiandGitHub 556973a445 Improve React Doctor score and badge (#1127)
* fix(react doctor): improve quality score and badge

* fix(react doctor): address review feedback

* fix(review): address final bot feedback
2026-05-10 18:25:13 +07:00

56 lines
1.8 KiB
TypeScript

import { useMemo } from 'react';
import type { CommunityIdentifier } from '@bitsocial/bitsocial-react-hooks';
import { findDirectoryByAddress, type DirectoryCommunity, useDirectories } from './use-directories';
const isLikelyCommunityName = (value: string) => value.includes('.');
const getCommunityIdentifier = (communityAddress: string | undefined, directories: DirectoryCommunity[]): CommunityIdentifier | undefined => {
if (!communityAddress) {
return undefined;
}
const directory = findDirectoryByAddress(directories, communityAddress);
if (directory?.name && directory.publicKey) {
return {
name: directory.name,
publicKey: directory.publicKey,
};
}
if (directory?.publicKey) {
return {
publicKey: directory.publicKey,
};
}
if (directory?.name) {
return {
name: directory.name,
};
}
return isLikelyCommunityName(communityAddress)
? {
name: communityAddress,
}
: {
publicKey: communityAddress,
};
};
const getCommunityIdentifiers = (communityAddresses: Array<string | undefined>, directories: DirectoryCommunity[]): CommunityIdentifier[] =>
communityAddresses.flatMap((communityAddress) => {
const community = getCommunityIdentifier(communityAddress, directories);
return community ? [community] : [];
});
export const useCommunityIdentifier = (communityAddress: string | undefined): CommunityIdentifier | undefined => {
const directories = useDirectories();
return useMemo(() => getCommunityIdentifier(communityAddress, directories), [communityAddress, directories]);
};
export const useCommunityIdentifiers = (communityAddresses?: Array<string | undefined>): CommunityIdentifier[] => {
const directories = useDirectories();
return useMemo(() => getCommunityIdentifiers(communityAddresses ?? [], directories), [communityAddresses, directories]);
};