import useAccountsStore from '@bitsocial/bitsocial-react-hooks/dist/stores/accounts/index.js'; import { getEquivalentCommunityAddressGroupKey, pickPreferredEquivalentCommunityAddress } from '@bitsocial/bitsocial-react-hooks/dist/lib/community-address.js'; type AccountWithCommunities = { communities?: Record; }; type AccountsStoreState = { activeAccountId?: string; accounts: Record; }; const EMPTY_ACCOUNT_COMMUNITY_ADDRESSES: string[] = []; const areStringArraysEqual = (previous: string[], next: string[]) => { if (previous === next) { return true; } if (previous.length !== next.length) { return false; } return previous.every((value, index) => value === next[index]); }; const getAccountCommunityAddresses = (state: AccountsStoreState): string[] => { const accountCommunities = state.activeAccountId ? state.accounts[state.activeAccountId]?.communities : undefined; if (!accountCommunities) { return EMPTY_ACCOUNT_COMMUNITY_ADDRESSES; } const groupedAddresses = new Map(); for (const communityAddress of Object.keys(accountCommunities)) { const groupKey = getEquivalentCommunityAddressGroupKey(communityAddress); const addresses = groupedAddresses.get(groupKey); if (addresses) { addresses.push(communityAddress); } else { groupedAddresses.set(groupKey, [communityAddress]); } } return [...groupedAddresses.values()].map((addresses) => pickPreferredEquivalentCommunityAddress(addresses)).sort(); }; export const useAccountCommunityAddresses = (): string[] => useAccountsStore(getAccountCommunityAddresses, areStringArraysEqual);