Files
pezkuwi-apps/packages/page-ranked/src/useMembers.ts
T
pezkuwichain d21bfb1320 feat: initial Pezkuwi Apps rebrand from polkadot-apps
Rebranded terminology:
- Polkadot → Pezkuwi
- Kusama → Dicle
- Westend → Zagros
- Rococo → PezkuwiChain
- Substrate → Bizinikiwi
- parachain → teyrchain

Custom logos with Kurdistan brand colors (#e6007a → #86e62a):
- bizinikiwi-hexagon.svg
- sora-bizinikiwi.svg
- hezscanner.svg
- heztreasury.svg
- pezkuwiscan.svg
- pezkuwistats.svg
- pezkuwiassembly.svg
- pezkuwiholic.svg
2026-01-07 13:05:27 +03:00

56 lines
1.7 KiB
TypeScript

// Copyright 2017-2025 @pezkuwi/app-preimages authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Option } from '@pezkuwi/types';
import type { AccountId32 } from '@pezkuwi/types/interfaces';
import type { PalletRankedCollectiveMemberRecord } from '@pezkuwi/types/lookup';
import type { BN } from '@pezkuwi/util';
import type { Member, PalletColl } from './types.js';
import { useMemo } from 'react';
import { createNamedHook, useApi, useCall } from '@pezkuwi/react-hooks';
import useMembersIds from './useMemberIds.js';
interface Result {
memberIds: string[];
memberRanks: BN[];
members: Member[];
}
const OPT_MEM = {
transform: ([[ids], infos]: [[AccountId32[]], Option<PalletRankedCollectiveMemberRecord>[]]): Result => {
const members = infos
.map((info, i) => [info.unwrapOr(null), ids[i]])
.filter((r): r is [PalletRankedCollectiveMemberRecord, AccountId32] => !!r[0])
.sort(([a], [b]) => b.rank.cmp(a.rank))
.map(([info, accountId]): Member => ({
accountId: accountId.toString(),
info
}));
return {
memberIds: members.map(({ accountId }) => accountId),
memberRanks: members.map(({ info }) => info.rank),
members
};
},
withParamsTransform: true
};
function useMembersImpl (collective: PalletColl): Result | undefined {
const { api } = useApi();
const ids = useMembersIds(collective);
const result = useCall(ids && ids.length !== 0 && api.query[collective].members.multi, [ids], OPT_MEM);
return useMemo(
() => ids && ids.length === 0
? { memberIds: [], memberRanks: [], members: [] }
: result,
[ids, result]
);
}
export default createNamedHook('useMembers', useMembersImpl);