import { Box } from "@mui/material"; import { GovernanceAction } from "../../types/api"; import { encodeCIP129CcIdentifier } from "../../lib/utils"; import { Typography } from "../Atoms/Typography"; import CopyButton from "../Atoms/CopyButton"; import { useTranslation } from "../../contexts/I18nContext"; import { EpochDiffView } from "../Molecules/EpochDiffView"; type CCMember = { expirationEpoch: number | null; hasScript: boolean; hash: string; type: string; newExpirationEpoch?: number | null; }; type CCMemberToBeRemoved = { hash: string; type: string; hasScript: boolean; }; export const GovernanceActionNewCommitteeDetailsTabContent = ({ description, }: Pick) => { const { t } = useTranslation(); const members = (description?.members as CCMember[]) || []; const membersToBeRemoved = (description?.membersToBeRemoved as CCMemberToBeRemoved[]) || []; const membersToBeAdded = members .filter( (member) => member?.expirationEpoch === undefined || member?.expirationEpoch === null ) .filter((member) => member?.hash) .map((member) => ({ cip129Identifier: encodeCIP129CcIdentifier({ keyHash: member.hash, typePrefix: member.hasScript ? "13" : "12", bech32Prefix: "cc_cold", }), expirationEpoch: member.expirationEpoch, newExpirationEpoch: member.newExpirationEpoch, hash: member.hash, })); const membersToBeUpdated = members .filter( (member) => !!member?.expirationEpoch && !!member?.newExpirationEpoch ) .filter((member) => member?.hash) .map((member) => ({ cip129Identifier: encodeCIP129CcIdentifier({ keyHash: member.hash, typePrefix: member.hasScript ? "13" : "12", bech32Prefix: "cc_cold", }), expirationEpoch: member.expirationEpoch, newExpirationEpoch: member.newExpirationEpoch, hash: member.hash, })); const removedMembers = membersToBeRemoved .filter((member) => member?.hash && member.hash.trim() !== "") .map((member) => ({ hash: member.hash, cip129Identifier: encodeCIP129CcIdentifier({ keyHash: member.hash, typePrefix: member.hasScript ? "13" : "12", bech32Prefix: "cc_cold", }), })); return ( {membersToBeAdded?.length > 0 && ( {t("outcome.membersToBeAddedToCommittee")} {membersToBeAdded.map( ({ cip129Identifier, hash, newExpirationEpoch }) => ( {cip129Identifier} {`${t("outcome.expirationEpoch")} ${ newExpirationEpoch ?? "-" }`} ) )} )} {removedMembers?.length > 0 && ( {t("outcome.membersToBeRemovedToCommittee")} {removedMembers.map(({ hash, cip129Identifier }) => ( {cip129Identifier} ))} )} {membersToBeUpdated?.length > 0 && ( {t("outcome.changeToTermsOfExistingMembers")} {membersToBeUpdated.map( ({ cip129Identifier, newExpirationEpoch, expirationEpoch, hash, }) => ( {cip129Identifier} ) )} )} {description?.threshold != null && ( {t("outcome.newThreshold")} {typeof description.threshold === "number" ? description.threshold.toString() : String(description.threshold)} )} ); };