From c0d8ce37a8e513c7dcccdb0605757ca4a8f793c0 Mon Sep 17 00:00:00 2001 From: Joseph Chalabi <100090645+chalabi2@users.noreply.github.com> Date: Tue, 14 Jan 2025 07:07:42 -0700 Subject: [PATCH 1/6] chore: only render admin selector in all navs if part of admin group (#210) --- components/react/mobileNav.tsx | 19 +++++++++++++++++-- components/react/sideNav.tsx | 19 +++++++++++++++++-- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/components/react/mobileNav.tsx b/components/react/mobileNav.tsx index 52eaa7de..92737465 100644 --- a/components/react/mobileNav.tsx +++ b/components/react/mobileNav.tsx @@ -15,10 +15,25 @@ import { import { WalletSection } from '../wallet'; import { RiMenuUnfoldFill } from 'react-icons/ri'; import { useState } from 'react'; -import { MdOutlineNetworkPing, MdContacts } from 'react-icons/md'; +import { MdContacts } from 'react-icons/md'; import env from '@/config/env'; +import { useChain } from '@cosmos-kit/react'; +import { usePoaGetAdmin } from '@/hooks'; +import { useGroupsByAdmin } from '@/hooks'; export default function MobileNav() { + const { address } = useChain(env.chain); + + const { poaAdmin } = usePoaGetAdmin(); + + const { groupByAdmin } = useGroupsByAdmin( + poaAdmin ?? 'manifest1afk9zr2hn2jsac63h4hm60vl9z3e5u69gndzf7c99cqge3vzwjzsfmy9qj' + ); + + const group = groupByAdmin?.groups?.[0]; + + const isMember = group?.members?.some(member => member?.member?.address === address); + const closeDrawer = () => { const drawer = document.getElementById('my-drawer') as HTMLInputElement; if (drawer) drawer.checked = false; @@ -88,7 +103,7 @@ export default function MobileNav() {
- + {isMember && }
diff --git a/components/react/sideNav.tsx b/components/react/sideNav.tsx index 0900bd57..4b21a7c3 100644 --- a/components/react/sideNav.tsx +++ b/components/react/sideNav.tsx @@ -19,6 +19,9 @@ import { import { MdContacts } from 'react-icons/md'; import { getRealLogo } from '@/utils'; import env from '@/config/env'; +import { useGroupsByAdmin } from '@/hooks'; +import { usePoaGetAdmin } from '@/hooks'; +import { useChain } from '@cosmos-kit/react'; interface SideNavProps { isDrawerVisible: boolean; @@ -28,6 +31,17 @@ interface SideNavProps { export default function SideNav({ isDrawerVisible, setDrawerVisible }: SideNavProps) { const { toggleTheme, theme } = useTheme(); const [isContactsOpen, setContactsOpen] = useState(false); + const { address } = useChain(env.chain); + + const { poaAdmin } = usePoaGetAdmin(); + + const { groupByAdmin } = useGroupsByAdmin( + poaAdmin ?? 'manifest1afk9zr2hn2jsac63h4hm60vl9z3e5u69gndzf7c99cqge3vzwjzsfmy9qj' + ); + + const group = groupByAdmin?.groups?.[0]; + + const isMember = group?.members?.some(member => member?.member?.address === address); const toggleDrawer = () => setDrawerVisible(!isDrawerVisible); const version = packageInfo.version; @@ -72,7 +86,8 @@ export default function SideNav({ isDrawerVisible, setDrawerVisible }: SideNavPr
    - + {isMember && } +
@@ -144,7 +159,7 @@ export default function SideNav({ isDrawerVisible, setDrawerVisible }: SideNavPr
    - + {isMember && }
From 8ea1e541b7ddd41dbf95b1d08e202a93e930fb52 Mon Sep 17 00:00:00 2001 From: Joseph Chalabi <100090645+chalabi2@users.noreply.github.com> Date: Tue, 14 Jan 2025 07:31:40 -0700 Subject: [PATCH 2/6] fix: improve factory token modals (#209) --------- Co-authored-by: Felix C. Morency <1102868+fmorency@users.noreply.github.com> --- bun.lockb | Bin 544188 -> 543092 bytes components/factory/components/DenomList.tsx | 164 ++++++++---------- components/factory/forms/BurnForm.tsx | 47 ++--- components/factory/forms/MintForm.tsx | 27 +-- .../factory/forms/__tests__/BurnForm.test.tsx | 5 - .../factory/forms/__tests__/MintForm.test.tsx | 5 - components/factory/modals/BurnModal.tsx | 5 +- components/factory/modals/MintModal.tsx | 15 +- components/factory/modals/TransferModal.tsx | 31 ++-- components/factory/modals/denomInfo.tsx | 53 ++++-- .../factory/modals/updateDenomMetadata.tsx | 38 ++-- 11 files changed, 171 insertions(+), 219 deletions(-) diff --git a/bun.lockb b/bun.lockb index db2f05581bc4f24407d24fa4e73e971f64254333..47364eb1138a7c4a65e35f47a361dd4aebc3ef16 100755 GIT binary patch delta 100971 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 P{PTKH>Fa~-h8q40w2zao delta 100762 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 { + if (isGroup) { + return `/groups?policyAddress=${admin}&tab=tokens`; + } + return '/factory'; + }; + + const updateUrlWithModal = (action: string, denomBase?: string) => { + const baseUrl = getBaseUrl(); + const query: Record = isGroup ? { policyAddress: admin, tab: 'tokens' } : {}; + + if (action) query.action = action; + if (denomBase) query.denom = denomBase; + + router.push( + { + pathname: isGroup ? '/groups' : '/factory', + query, + }, + undefined, + { shallow: true } + ); + }; + const handleDenomSelect = (denom: ExtendedMetadataSDKType) => { if (!modalType) { setSelectedDenom(denom); setModalType('info'); - // router.push(`/factory?denom=${denom.base}&action=info`, undefined, { shallow: true }); + updateUrlWithModal('info', denom.base); } }; @@ -111,9 +135,7 @@ export default function DenomList({ setModalType(null); setOpenUpdateDenomMetadataModal(false); setOpenTransferDenomModal(false); - router.push(isGroup ? `/groups?policyAddress=${admin}&tab=tokens` : '/factory', undefined, { - shallow: true, - }); + updateUrlWithModal(''); }; const handleUpdateModalClose = () => { @@ -121,26 +143,13 @@ export default function DenomList({ setOpenUpdateDenomMetadataModal(false); setOpenTransferDenomModal(false); setModalType(null); - router.push(isGroup ? `/groups?policyAddress=${admin}&tab=tokens` : '/factory', undefined, { - shallow: true, - }); + updateUrlWithModal(''); }; - const handleUpdateModal = (denom: ExtendedMetadataSDKType, e: React.MouseEvent) => { - e.preventDefault(); - e.stopPropagation(); + const handleUpdateModal = (denom: ExtendedMetadataSDKType) => { setSelectedDenom(denom); - setModalType('update'); setOpenUpdateDenomMetadataModal(true); - router.push( - isGroup - ? `/groups?policyAddress=${admin}&tab=tokens` - : `/factory?denom=${denom.base}&action=update`, - undefined, - { - shallow: true, - } - ); + updateUrlWithModal('update', denom.base); }; const handleTransferModal = (denom: ExtendedMetadataSDKType, e: React.MouseEvent) => { @@ -149,39 +158,41 @@ export default function DenomList({ setSelectedDenom(denom); setModalType('transfer'); setOpenTransferDenomModal(true); + updateUrlWithModal('transfer', denom.base); + }; + + const handleModalClose = () => { + setSelectedDenom(null); + setModalType(null); + // Remove modal type from URL router.push( - isGroup - ? `/groups?policyAddress=${admin}&tab=tokens` - : `/factory?denom=${denom.base}&action=transfer`, + { + pathname: isGroup ? '/groups' : '/factory', + query: isGroup ? { policyAddress: admin, tab: 'tokens' } : undefined, + }, undefined, { shallow: true } ); }; - const handleSwitchToMultiMint = () => { - setModalType('multimint'); - router.push( - isGroup - ? `/groups?policyAddress=${admin}&tab=tokens` - : `/factory?denom=${selectedDenom?.base}&action=multimint`, - undefined, - { - shallow: true, - } - ); + const handleMint = (denom: ExtendedMetadataSDKType, e: React.MouseEvent) => { + e.stopPropagation(); + setSelectedDenom(denom); + setModalType('mint'); + updateUrlWithModal('mint', denom.base); }; - const handleSwitchToMultiBurn = () => { - setModalType('multiburn'); - router.push( - isGroup - ? `/groups?policyAddress=${admin}&tab=tokens` - : `/factory?denom=${selectedDenom?.base}&action=multiburn`, - undefined, - { - shallow: true, - } - ); + const handleBurn = (denom: ExtendedMetadataSDKType, e: React.MouseEvent) => { + e.stopPropagation(); + setSelectedDenom(denom); + setModalType('burn'); + updateUrlWithModal('burn', denom.base); + }; + + const handleUpdate = (denom: ExtendedMetadataSDKType) => { + setSelectedDenom(denom); + setOpenUpdateDenomMetadataModal(true); + updateUrlWithModal('update', denom.base); }; return ( @@ -269,18 +280,10 @@ export default function DenomList({ key={denom.base} denom={denom} onSelectDenom={() => handleDenomSelect(denom)} - onMint={e => { - e.stopPropagation(); - setSelectedDenom(denom); - setModalType('mint'); - }} - onBurn={e => { - e.stopPropagation(); - setSelectedDenom(denom); - setModalType('burn'); - }} + onMint={e => handleMint(denom, e)} + onBurn={e => handleBurn(denom, e)} onTransfer={e => handleTransferModal(denom, e)} - onUpdate={e => handleUpdateModal(denom, e)} + onUpdate={() => handleUpdate(denom)} /> ))} @@ -401,7 +404,6 @@ export default function DenomList({ totalSupply={selectedDenom?.totalSupply ?? '0'} isOpen={modalType === 'mint'} onClose={handleCloseModal} - onSwitchToMultiMint={handleSwitchToMultiMint} isGroup={isGroup} /> { - refetch(); - handleUpdateModalClose(); - }} - openUpdateDenomMetadataModal={openUpdateDenomMetadataModal} - setOpenUpdateDenomMetadataModal={open => { - if (!open) { - handleUpdateModalClose(); - } else { - setOpenUpdateDenomMetadataModal(true); - } - }} + modalId="update-denom-metadata-modal" + onSuccess={refetchDenoms} admin={admin} isGroup={isGroup} /> { - if (!open) { - handleCloseModal(); - } else { - setOpenTransferDenomModal(true); - } - }} + isOpen={modalType === 'transfer'} + onClose={handleModalClose} onSuccess={() => { refetch(); - handleUpdateModalClose(); + handleModalClose(); }} - denom={selectedDenom} - address={address} - isOpen={modalType === 'transfer'} - onClose={handleCloseModal} - isGroup={isGroup} admin={admin} + isGroup={isGroup} />
); @@ -473,7 +457,7 @@ function TokenRow({ onMint: (e: React.MouseEvent) => void; onBurn: (e: React.MouseEvent) => void; onTransfer: (e: React.MouseEvent) => void; - onUpdate: (e: React.MouseEvent) => void; + onUpdate: () => void; }) { // Add safety checks for the values const exponent = denom?.denom_units?.[1]?.exponent ?? 0; @@ -542,11 +526,7 @@ function TokenRow({ diff --git a/components/factory/forms/BurnForm.tsx b/components/factory/forms/BurnForm.tsx index c9444a13..48290f51 100644 --- a/components/factory/forms/BurnForm.tsx +++ b/components/factory/forms/BurnForm.tsx @@ -28,7 +28,7 @@ interface BurnFormProps { refetch: () => void; balance: string; totalSupply: string; - onMultiBurnClick: () => void; + isGroup?: boolean; } @@ -40,13 +40,12 @@ export default function BurnForm({ refetch, balance, totalSupply, - onMultiBurnClick, + isGroup, }: Readonly) { const [amount, setAmount] = useState(''); - const [recipient, setRecipient] = useState(address); + const [recipient, setRecipient] = useState(address || ''); - const [isModalOpen, setIsModalOpen] = useState(false); const [burnPairs, setBurnPairs] = useState([{ address: '', amount: '' }]); const [isContactsOpen, setIsContactsOpen] = useState(false); @@ -83,21 +82,6 @@ export default function BurnForm({ recipient: Yup.string().required('Recipient address is required').manifestAddress(), }); - // Format balance safely - function formatAmount(amount: string | null | undefined): string { - if (amount == null) { - return '-'; - } - try { - return Number(shiftDigits(amount, -exponent)).toLocaleString(undefined, { - maximumFractionDigits: exponent, - }); - } catch (error) { - console.warn('Error formatting amount:', error); - return 'x'; - } - } - const handleBurn = async () => { if (!amount || Number.isNaN(Number(amount))) { return; @@ -212,7 +196,7 @@ export default function BurnForm({ fee, onSuccess: () => { setBurnPairs([{ address: '', amount: '' }]); - setIsModalOpen(false); + refetch(); }, }); @@ -283,10 +267,10 @@ export default function BurnForm({ label="AMOUNT" name="amount" placeholder="Enter amount" - value={amount} + value={amount || ''} onChange={(e: React.ChangeEvent) => { - setAmount(e.target.value); - setFieldValue('amount', e.target.value); + setAmount(e.target.value || ''); + setFieldValue('amount', e.target.value || ''); }} className={`input input-bordered w-full ${ touched.amount && errors.amount ? 'input-error' : '' @@ -307,10 +291,10 @@ export default function BurnForm({ label="TARGET" name="recipient" placeholder="Recipient address" - value={recipient} + value={recipient || ''} onChange={(e: React.ChangeEvent) => { - setRecipient(e.target.value); - setFieldValue('recipient', e.target.value); + setRecipient(e.target.value || ''); + setFieldValue('recipient', e.target.value || ''); }} className={`input input-bordered w-full transition-none ${ touched.recipient && errors.recipient ? 'input-error' : '' @@ -371,17 +355,6 @@ export default function BurnForm({ )}
- {isMFX && ( - - )} ); } diff --git a/components/factory/forms/MintForm.tsx b/components/factory/forms/MintForm.tsx index e71c20df..4ca5167c 100644 --- a/components/factory/forms/MintForm.tsx +++ b/components/factory/forms/MintForm.tsx @@ -22,7 +22,6 @@ export default function MintForm({ totalSupply, isGroup, admin, - onMultiMintClick, }: Readonly<{ isAdmin: boolean; denom: ExtendedMetadataSDKType; @@ -32,10 +31,9 @@ export default function MintForm({ totalSupply: string; isGroup?: boolean; admin?: string; - onMultiMintClick: () => void; }>) { const [amount, setAmount] = useState(''); - const [recipient, setRecipient] = useState(address); + const [recipient, setRecipient] = useState(address || ''); const [isContactsOpen, setIsContactsOpen] = useState(false); const { tx, isSigning, setIsSigning } = useTx(env.chain); @@ -160,10 +158,10 @@ export default function MintForm({ label="AMOUNT" name="amount" placeholder="Enter amount" - value={amount} + value={amount || ''} onChange={(e: React.ChangeEvent) => { - setAmount(e.target.value); - setFieldValue('amount', e.target.value); + setAmount(e.target.value || ''); + setFieldValue('amount', e.target.value || ''); }} className={`input input-bordered w-full ${ touched.amount && errors.amount ? 'input-error' : '' @@ -184,10 +182,10 @@ export default function MintForm({ label="RECIPIENT" name="recipient" placeholder="Recipient address" - value={recipient} + value={recipient || ''} onChange={(e: React.ChangeEvent) => { - setRecipient(e.target.value); - setFieldValue('recipient', e.target.value); + setRecipient(e.target.value || ''); + setFieldValue('recipient', e.target.value || ''); }} className={`input input-bordered w-full transition-none ${ touched.recipient && errors.recipient ? 'input-error' : '' @@ -250,17 +248,6 @@ export default function MintForm({ )} - {isMFX && ( - - )} ); } diff --git a/components/factory/forms/__tests__/BurnForm.test.tsx b/components/factory/forms/__tests__/BurnForm.test.tsx index 0fc98294..4bebe85e 100644 --- a/components/factory/forms/__tests__/BurnForm.test.tsx +++ b/components/factory/forms/__tests__/BurnForm.test.tsx @@ -47,11 +47,6 @@ describe('BurnForm Component', () => { expect(screen.getByText('CIRCULATING SUPPLY')).toBeInTheDocument(); }); - test('renders multi burn when token is mfx', () => { - renderWithProps({ denom: mockMfxDenom }); - expect(screen.getByLabelText('multi-burn-button')).toBeInTheDocument(); - }); - test('renders not affiliated message when not admin and token is mfx', () => { renderWithProps({ isAdmin: false, denom: mockMfxDenom }); expect( diff --git a/components/factory/forms/__tests__/MintForm.test.tsx b/components/factory/forms/__tests__/MintForm.test.tsx index 51fe83f9..3dee46e9 100644 --- a/components/factory/forms/__tests__/MintForm.test.tsx +++ b/components/factory/forms/__tests__/MintForm.test.tsx @@ -86,9 +86,4 @@ describe('MintForm Component', () => { expect(mintButton).toBeEnabled(); }); }); - - test('renders multi mint button when token is mfx', () => { - renderWithProps({ denom: mockMfxDenom }); - expect(screen.getByLabelText('multi-mint-button')).toBeInTheDocument(); - }); }); diff --git a/components/factory/modals/BurnModal.tsx b/components/factory/modals/BurnModal.tsx index 438a0d7f..5b48e427 100644 --- a/components/factory/modals/BurnModal.tsx +++ b/components/factory/modals/BurnModal.tsx @@ -13,7 +13,7 @@ export default function BurnModal({ totalSupply, isOpen, onClose, - onSwitchToMultiBurn, + isGroup, }: { denom: ExtendedMetadataSDKType | null; @@ -24,7 +24,7 @@ export default function BurnModal({ totalSupply: string; isOpen: boolean; onClose: () => void; - onSwitchToMultiBurn: () => void; + isGroup?: boolean; }) { useEffect(() => { @@ -96,7 +96,6 @@ export default function BurnModal({ refetch={refetch} address={address} denom={denom} - onMultiBurnClick={onSwitchToMultiBurn} isGroup={isGroup} /> )} diff --git a/components/factory/modals/MintModal.tsx b/components/factory/modals/MintModal.tsx index cd40d704..0c67ffcf 100644 --- a/components/factory/modals/MintModal.tsx +++ b/components/factory/modals/MintModal.tsx @@ -14,7 +14,7 @@ export default function MintModal({ totalSupply, isOpen, onClose, - onSwitchToMultiMint, + admin, isGroup, }: { @@ -25,7 +25,7 @@ export default function MintModal({ totalSupply: string; isOpen: boolean; onClose: () => void; - onSwitchToMultiMint: () => void; + admin: string; isGroup?: boolean; }) { @@ -40,8 +40,6 @@ export default function MintModal({ return () => document.removeEventListener('keydown', handleEscape); }, [isOpen]); - const [isMultiMintOpen, setIsMultiMintOpen] = useState(false); - const { groupByAdmin, isGroupByAdminLoading } = useGroupsByAdmin(admin); if (!denom) return null; @@ -52,14 +50,6 @@ export default function MintModal({ const safeBalance = balance || '0'; const safeTotalSupply = totalSupply || '0'; - const handleMultiMintOpen = () => { - onSwitchToMultiMint(); - }; - - const handleMultiMintClose = () => { - setIsMultiMintOpen(false); - }; - const modalContent = ( )} diff --git a/components/factory/modals/TransferModal.tsx b/components/factory/modals/TransferModal.tsx index 1641796a..84249f15 100644 --- a/components/factory/modals/TransferModal.tsx +++ b/components/factory/modals/TransferModal.tsx @@ -16,8 +16,6 @@ const TokenOwnershipSchema = Yup.object().shape({ }); export default function TransferModal({ - openTransferDenomModal, - setOpenTransferDenomModal, denom, address, modalId, @@ -27,8 +25,6 @@ export default function TransferModal({ admin, isGroup, }: { - openTransferDenomModal: boolean; - setOpenTransferDenomModal: (open: boolean) => void; denom: ExtendedMetadataSDKType | null; address: string; modalId: string; @@ -51,14 +47,15 @@ export default function TransferModal({ const { setToastMessage } = useToast(); const handleCloseModal = (formikReset?: () => void) => { - setOpenTransferDenomModal(false); formikReset?.(); + onClose(); }; const { denomAuthority, isDenomAuthorityLoading } = useDenomAuthorityMetadata(denom?.base ?? ''); + const formData = { - denom: denom?.base ?? '', - currentAdmin: denomAuthority, + subdenom: denom?.base || '', + currentAdmin: denomAuthority?.admin || '', newAdmin: '', }; @@ -131,7 +128,7 @@ export default function TransferModal({ const modalContent = ( handleTransfer(values, resetForm)} validateOnChange={true} validateOnBlur={true} + enableReinitialize={true} > {({ isValid, dirty, values, handleChange, handleSubmit, resetForm }) => (
@@ -185,19 +183,26 @@ export default function TransferModal({ - +
@@ -95,11 +108,31 @@ export const DenomInfoModal: React.FC<{ />
- - + +
); + + // Only render if we're in the browser + if (typeof document !== 'undefined') { + return createPortal(modalContent, document.body); + } + + return null; }; function InfoItem({ diff --git a/components/factory/modals/updateDenomMetadata.tsx b/components/factory/modals/updateDenomMetadata.tsx index fd9b3604..df548616 100644 --- a/components/factory/modals/updateDenomMetadata.tsx +++ b/components/factory/modals/updateDenomMetadata.tsx @@ -33,9 +33,9 @@ const TokenDetailsSchema = (context: { subdenom: string }) => .supportedImageUrl(), }); -export function UpdateDenomMetadataModal({ - openUpdateDenomMetadataModal, - setOpenUpdateDenomMetadataModal, +export default function UpdateDenomMetadataModal({ + isOpen, + onClose, denom, address, modalId, @@ -43,8 +43,8 @@ export function UpdateDenomMetadataModal({ admin, isGroup, }: { - openUpdateDenomMetadataModal: boolean; - setOpenUpdateDenomMetadataModal: (open: boolean) => void; + isOpen: boolean; + onClose: () => void; denom: ExtendedMetadataSDKType | null; address: string; modalId: string; @@ -52,21 +52,17 @@ export function UpdateDenomMetadataModal({ admin: string; isGroup?: boolean; }) { - const handleCloseModal = (formikReset?: () => void) => { - setOpenUpdateDenomMetadataModal(false); - formikReset?.(); - }; - useEffect(() => { const handleEscape = (e: KeyboardEvent) => { - if (e.key === 'Escape' && openUpdateDenomMetadataModal) { - handleCloseModal(); + if (e.key === 'Escape' && isOpen) { + onClose(); } }; document.addEventListener('keydown', handleEscape); return () => document.removeEventListener('keydown', handleEscape); - }, [openUpdateDenomMetadataModal]); + }, [isOpen, onClose]); + const baseDenom = denom?.base?.split('/').pop() || ''; const fullDenom = `factory/${address}/${baseDenom}`; const symbol = baseDenom.slice(1).toUpperCase(); @@ -82,9 +78,9 @@ export function UpdateDenomMetadataModal({ ], uri: denom?.uri || '', uriHash: denom?.uri_hash || '', - subdenom: baseDenom, + subdenom: baseDenom || '', exponent: '6', - label: fullDenom, + label: fullDenom || '', }; const { tx, isSigning, setIsSigning } = useTx(env.chain); const { estimateFee } = useFeeEstimation(env.chain); @@ -149,7 +145,7 @@ export function UpdateDenomMetadataModal({ fee, onSuccess: () => { onSuccess(); - handleCloseModal(resetForm); + onClose(); }, }); } catch (error) { @@ -162,7 +158,7 @@ export function UpdateDenomMetadataModal({ const modalContent = ( handleCloseModal(() => resetForm())} + onClick={() => onClose()} > ✕ @@ -253,7 +249,7 @@ export function UpdateDenomMetadataModal({ @@ -282,7 +278,7 @@ export function UpdateDenomMetadataModal({ backgroundColor: 'rgba(0, 0, 0, 0.3)', }} > - + ); From e9f1b0e7437961e3572dce84002a5be8fce12d48 Mon Sep 17 00:00:00 2001 From: Joseph Chalabi <100090645+chalabi2@users.noreply.github.com> Date: Wed, 15 Jan 2025 07:53:42 -0700 Subject: [PATCH 3/6] chore: update cosmos-kit ledger & web3auth (#215) --------- Co-authored-by: Felix C. Morency <1102868+fmorency@users.noreply.github.com> --- bun.lockb | Bin 543092 -> 540276 bytes package.json | 9 +++++---- pages/_app.tsx | 5 ++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bun.lockb b/bun.lockb index 47364eb1138a7c4a65e35f47a361dd4aebc3ef16..ee465da3e6b46d6bb79b7a6f2d46242a757c7a23 100755 GIT binary patch delta 71109 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 delta 73350 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

^A%WCIl&0WYV%hQR{0 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 bxmCw0ut=mHeIwFId^#x=ZIN}IYMA~HOZ`Zy diff --git a/package.json b/package.json index 74018f0e..b9cf061b 100644 --- a/package.json +++ b/package.json @@ -30,12 +30,13 @@ "**/@cosmjs/stargate": "npm:@liftedinit/stargate@0.32.4-ll.3" }, "dependencies": { - "@chain-registry/assets": "^1.70.67", + "@chain-registry/assets": "^1.70.93", "@cosmjs/cosmwasm-stargate": "0.32.4", "@cosmjs/stargate": "npm:@liftedinit/stargate@0.32.4-ll.3", "@cosmos-kit/cosmos-extension-metamask": "^0.12.3", + "@cosmos-kit/ledger": "^2.13.3", "@cosmos-kit/react": "2.21.2", - "@cosmos-kit/web3auth": "^2.14.3", + "@cosmos-kit/web3auth": "^2.14.4", "@fontsource/manrope": "^5.0.21", "@headlessui/react": "^1.7.18", "@heroicons/react": "^2.1.5", @@ -50,9 +51,9 @@ "apexcharts": "^3.54.0", "autoprefixer": "^10.4.20", "babel-plugin-glsl": "^1.0.0", - "chain-registry": "1.69.67", + "chain-registry": "1.69.93", "cosmjs-types": "^0.9.0", - "cosmos-kit": "2.23.4", + "cosmos-kit": "^2.23.5", "country-flag-icons": "^1.5.13", "daisyui": "^4.12.10", "dayjs": "^1.11.13", diff --git a/pages/_app.tsx b/pages/_app.tsx index a17fd660..5d43699f 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -33,8 +33,7 @@ import { cosmosProtoRegistry, } from '@liftedinit/manifestjs'; import MobileNav from '@/components/react/mobileNav'; - -import { OPENLOGIN_NETWORK_TYPE } from '@toruslabs/openlogin-utils'; +import { WEB3AUTH_NETWORK_TYPE } from '@web3auth/auth'; type ManifestAppProps = AppProps & { Component: AppProps['Component']; @@ -138,7 +137,7 @@ function ManifestApp({ Component, pageProps }: ManifestAppProps) { client: { clientId: env.web3AuthClientId, - web3AuthNetwork: env.web3AuthNetwork as OPENLOGIN_NETWORK_TYPE, // Safe to cast since we validate the env vars in config/env.ts + web3AuthNetwork: env.web3AuthNetwork as WEB3AUTH_NETWORK_TYPE, // Safe to cast since we validate the env vars in config/env.ts }, promptSign: async (_, signData) => new Promise(resolve => From 829d769aef85b0d2ad21d2c2e15dfabac0bc46a6 Mon Sep 17 00:00:00 2001 From: Joseph Chalabi <100090645+chalabi2@users.noreply.github.com> Date: Wed, 15 Jan 2025 07:54:17 -0700 Subject: [PATCH 4/6] fix: backdrop issues for proposal message modal (#213) --- components/groups/modals/voteDetailsModal.tsx | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/components/groups/modals/voteDetailsModal.tsx b/components/groups/modals/voteDetailsModal.tsx index 8b296ce4..fff87982 100644 --- a/components/groups/modals/voteDetailsModal.tsx +++ b/components/groups/modals/voteDetailsModal.tsx @@ -752,7 +752,7 @@ function VoteDetailsModal({ )}

-
+
+
Date: Wed, 15 Jan 2025 07:54:38 -0700 Subject: [PATCH 5/6] fix: update proposals on succesfull denomupdate (#214) --- components/factory/modals/updateDenomMetadata.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/components/factory/modals/updateDenomMetadata.tsx b/components/factory/modals/updateDenomMetadata.tsx index df548616..e6f57546 100644 --- a/components/factory/modals/updateDenomMetadata.tsx +++ b/components/factory/modals/updateDenomMetadata.tsx @@ -11,6 +11,7 @@ import env from '@/config/env'; import { createPortal } from 'react-dom'; import { Any } from '@liftedinit/manifestjs/dist/codegen/google/protobuf/any'; import { MsgSetDenomMetadata } from '@liftedinit/manifestjs/dist/codegen/osmosis/tokenfactory/v1beta1/tx'; +import { useProposalsByPolicyAccount } from '@/hooks/useQueries'; const TokenDetailsSchema = (context: { subdenom: string }) => Yup.object().shape({ @@ -52,6 +53,7 @@ export default function UpdateDenomMetadataModal({ admin: string; isGroup?: boolean; }) { + const { refetchProposals } = useProposalsByPolicyAccount(admin); useEffect(() => { const handleEscape = (e: KeyboardEvent) => { if (e.key === 'Escape' && isOpen) { @@ -144,6 +146,9 @@ export default function UpdateDenomMetadataModal({ await tx([msg], { fee, onSuccess: () => { + if (isGroup) { + refetchProposals(); + } onSuccess(); onClose(); }, From d041b418609555f408f55825bb875c3184f4d01f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20C=2E=20Morency?= <1102868+fmorency@users.noreply.github.com> Date: Fri, 31 Jan 2025 09:06:50 -0500 Subject: [PATCH 6/6] feat!: all tx types & fees (#208) --- bun.lockb | Bin 540276 -> 540588 bytes .../modals/__tests__/validatorModal.test.tsx | 6 +- .../components/__tests__/historyBox.test.tsx | 54 ++-- components/bank/components/historyBox.tsx | 245 +++++------------ components/bank/components/index.ts | 10 - components/bank/handlers/bank/index.ts | 2 + .../handlers/bank/msgMultiSendHandler.tsx | 73 ++++++ .../bank/handlers/bank/msgSendHandler.tsx | 41 +++ .../bank/handlers/createMessageUtils.tsx | 46 ++++ .../handlers/createSenderReceiverHandler.tsx | 56 ++++ components/bank/handlers/defaultHandler.tsx | 9 + components/bank/handlers/group/index.ts | 14 + components/bank/handlers/group/metadata.ts | 29 ++ .../handlers/group/msgCreateGroupHandler.tsx | 32 +++ .../group/msgCreateGroupPolicyHandler.tsx | 39 +++ .../group/msgCreateGroupWithPolicyHandler.tsx | 24 ++ .../bank/handlers/group/msgExecHandler.tsx | 27 ++ .../handlers/group/msgLeaveGroupHandler.tsx | 13 + .../group/msgSubmitProposalHandler.tsx | 22 ++ .../group/msgUpdateGroupAdminHandler.tsx | 42 +++ .../group/msgUpdateGroupMembersHandler.tsx | 19 ++ .../group/msgUpdateGroupMetadataHandler.tsx | 13 + .../msgUpdateGroupPolicyAdminHandler.tsx | 53 ++++ ...UpdateGroupPolicyDecisionPolicyHandler.tsx | 32 +++ .../msgUpdateGroupPolicyMetadataHandler.tsx | 27 ++ .../bank/handlers/group/msgVoteHandler.tsx | 38 +++ .../group/msgWithdrawProposalHandler.tsx | 25 ++ components/bank/handlers/handlerRegistry.ts | 24 ++ components/bank/handlers/ibc/index.ts | 1 + .../bank/handlers/ibc/msgTransferHandler.tsx | 38 +++ components/bank/handlers/index.ts | 9 + components/bank/handlers/manifest/index.ts | 2 + .../manifest/msgBurnHeldBalanceHandler.tsx | 30 +++ .../handlers/manifest/msgPayoutHandler.tsx | 45 ++++ components/bank/handlers/poa/index.ts | 4 + .../poa/msgCreateValidatorHandler.tsx | 21 ++ .../poa/msgRemovePendingValidatorHandler.tsx | 24 ++ .../poa/msgRemoveValidatorHandler.tsx | 21 ++ .../bank/handlers/poa/msgSetPowerHandler.tsx | 42 +++ .../bank/handlers/tokenfactory/index.ts | 5 + .../handlers/tokenfactory/msgBurnHandler.tsx | 38 +++ .../tokenfactory/msgChangeAdminHandler.tsx | 40 +++ .../tokenfactory/msgCreateDenomHandler.tsx | 27 ++ .../handlers/tokenfactory/msgMintHandler.tsx | 40 +++ .../msgSetDenomMetadataHandler.tsx | 21 ++ components/bank/handlers/upgrade/index.ts | 2 + .../upgrade/msgCancelUpgradeHandler.tsx | 24 ++ .../upgrade/msgSoftwareUpgradeHandler.tsx | 41 +++ components/bank/index.ts | 1 + components/bank/modals/txInfo.tsx | 109 +++++--- components/bank/types.ts | 24 ++ .../components/__tests__/groupInfo.test.tsx | 6 +- .../components/__tests__/myGroups.test.tsx | 2 +- .../groups/components/groupControls.tsx | 11 +- components/groups/components/myGroups.tsx | 4 +- components/groups/modals/groupInfo.tsx | 2 +- components/groups/modals/updateGroupModal.tsx | 2 +- components/icons/index.ts | 55 ++-- components/react/modal.tsx | 2 +- hooks/useQueries.ts | 169 ++---------- package.json | 1 + pages/bank.tsx | 9 +- tests/mock.ts | 248 ++++++++++-------- utils/format.ts | 46 ++++ utils/index.ts | 1 + utils/json.ts | 8 + utils/voting.ts | 19 ++ 67 files changed, 1652 insertions(+), 557 deletions(-) create mode 100644 components/bank/handlers/bank/index.ts create mode 100644 components/bank/handlers/bank/msgMultiSendHandler.tsx create mode 100644 components/bank/handlers/bank/msgSendHandler.tsx create mode 100644 components/bank/handlers/createMessageUtils.tsx create mode 100644 components/bank/handlers/createSenderReceiverHandler.tsx create mode 100644 components/bank/handlers/defaultHandler.tsx create mode 100644 components/bank/handlers/group/index.ts create mode 100644 components/bank/handlers/group/metadata.ts create mode 100644 components/bank/handlers/group/msgCreateGroupHandler.tsx create mode 100644 components/bank/handlers/group/msgCreateGroupPolicyHandler.tsx create mode 100644 components/bank/handlers/group/msgCreateGroupWithPolicyHandler.tsx create mode 100644 components/bank/handlers/group/msgExecHandler.tsx create mode 100644 components/bank/handlers/group/msgLeaveGroupHandler.tsx create mode 100644 components/bank/handlers/group/msgSubmitProposalHandler.tsx create mode 100644 components/bank/handlers/group/msgUpdateGroupAdminHandler.tsx create mode 100644 components/bank/handlers/group/msgUpdateGroupMembersHandler.tsx create mode 100644 components/bank/handlers/group/msgUpdateGroupMetadataHandler.tsx create mode 100644 components/bank/handlers/group/msgUpdateGroupPolicyAdminHandler.tsx create mode 100644 components/bank/handlers/group/msgUpdateGroupPolicyDecisionPolicyHandler.tsx create mode 100644 components/bank/handlers/group/msgUpdateGroupPolicyMetadataHandler.tsx create mode 100644 components/bank/handlers/group/msgVoteHandler.tsx create mode 100644 components/bank/handlers/group/msgWithdrawProposalHandler.tsx create mode 100644 components/bank/handlers/handlerRegistry.ts create mode 100644 components/bank/handlers/ibc/index.ts create mode 100644 components/bank/handlers/ibc/msgTransferHandler.tsx create mode 100644 components/bank/handlers/index.ts create mode 100644 components/bank/handlers/manifest/index.ts create mode 100644 components/bank/handlers/manifest/msgBurnHeldBalanceHandler.tsx create mode 100644 components/bank/handlers/manifest/msgPayoutHandler.tsx create mode 100644 components/bank/handlers/poa/index.ts create mode 100644 components/bank/handlers/poa/msgCreateValidatorHandler.tsx create mode 100644 components/bank/handlers/poa/msgRemovePendingValidatorHandler.tsx create mode 100644 components/bank/handlers/poa/msgRemoveValidatorHandler.tsx create mode 100644 components/bank/handlers/poa/msgSetPowerHandler.tsx create mode 100644 components/bank/handlers/tokenfactory/index.ts create mode 100644 components/bank/handlers/tokenfactory/msgBurnHandler.tsx create mode 100644 components/bank/handlers/tokenfactory/msgChangeAdminHandler.tsx create mode 100644 components/bank/handlers/tokenfactory/msgCreateDenomHandler.tsx create mode 100644 components/bank/handlers/tokenfactory/msgMintHandler.tsx create mode 100644 components/bank/handlers/tokenfactory/msgSetDenomMetadataHandler.tsx create mode 100644 components/bank/handlers/upgrade/index.ts create mode 100644 components/bank/handlers/upgrade/msgCancelUpgradeHandler.tsx create mode 100644 components/bank/handlers/upgrade/msgSoftwareUpgradeHandler.tsx create mode 100644 components/bank/types.ts create mode 100644 utils/format.ts create mode 100644 utils/json.ts diff --git a/bun.lockb b/bun.lockb index ee465da3e6b46d6bb79b7a6f2d46242a757c7a23..fa0a904b4420ffd774cd3825a4f0928a2761d44f 100755 GIT binary patch delta 105787 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 delta 105732 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 { }); }); - test('enables update button when input is valid', async () => { + test('enables upgrade button when input is valid', async () => { renderWithProps(); const input = screen.getByPlaceholderText('1000'); fireEvent.change(input, { target: { value: '2000' } }); @@ -58,7 +58,7 @@ describe('ValidatorDetailsModal Component', () => { }); }); - test('disables update button when input is invalid', async () => { + test('disables upgrade button when input is invalid', async () => { renderWithProps(); const input = screen.getByPlaceholderText('1000'); fireEvent.change(input, { target: { value: '-1' } }); @@ -82,7 +82,7 @@ describe('ValidatorDetailsModal Component', () => { }); }); - test('shows warning message for unsafe power update', async () => { + test('shows warning message for unsafe power upgrade', async () => { renderWithProps(); const input = screen.getByPlaceholderText('1000'); fireEvent.change(input, { target: { value: '9000' } }); diff --git a/components/bank/components/__tests__/historyBox.test.tsx b/components/bank/components/__tests__/historyBox.test.tsx index 48f35a22..cea7552e 100644 --- a/components/bank/components/__tests__/historyBox.test.tsx +++ b/components/bank/components/__tests__/historyBox.test.tsx @@ -1,8 +1,8 @@ import { test, expect, afterEach, describe, mock, jest } from 'bun:test'; import { screen, cleanup, fireEvent } from '@testing-library/react'; -import { HistoryBox } from '../historyBox'; import { renderWithChainProvider } from '@/tests/render'; import { mockTransactions } from '@/tests/mock'; +import { HistoryBox } from '../historyBox'; import matchers from '@testing-library/jest-dom/matchers'; expect.extend(matchers); @@ -52,7 +52,7 @@ describe('HistoryBox', () => { ); }); - test('displays transactions', () => { + test('displays transactions as `address1`', () => { renderWithChainProvider( { totalPages={2} /> ); - expect(screen.getByText('Sent')).toBeInTheDocument(); - expect(screen.getByText('Received')).toBeInTheDocument(); - - const minted = screen.getAllByText('Minted'); - const burned = screen.getAllByText('Burned'); + expect(screen.getByText(/You sent/i)).toBeInTheDocument(); + expect(screen.getByText(/You received/i)).toBeInTheDocument(); + expect(screen.getAllByText(/You were burned/i)).toHaveLength(2); + expect(screen.getAllByText(/You minted/i)).toHaveLength(2); + expect(screen.getAllByText(/You were minted/i)).toHaveLength(4); + }); - expect(minted.length).toBe(6); - expect(burned.length).toBe(2); + test('displays transactions as `address2`', () => { + renderWithChainProvider( + + ); + expect(screen.getByText(/You sent/i)).toBeInTheDocument(); + expect(screen.getByText(/You received/i)).toBeInTheDocument(); + expect(screen.getAllByText(/You burned/i)).toHaveLength(2); + expect(screen.getAllByText(/You were minted/i)).toHaveLength(2); + expect(screen.getAllByText(/You minted/i)).toHaveLength(4); }); test('opens modal when clicking on a transaction', () => { @@ -83,7 +97,7 @@ describe('HistoryBox', () => { /> ); - const transactionElement = screen.getByText('Sent').closest('div[role="button"]'); + const transactionElement = screen.getByText(/You sent/i).closest('div[role="button"]'); if (transactionElement) { fireEvent.click(transactionElement); @@ -101,16 +115,16 @@ describe('HistoryBox', () => { totalPages={2} /> ); - expect(screen.queryByText('-1.00QT TOKEN')).toBeInTheDocument(); // Send - expect(screen.queryByText('+2.00Q TOKEN')).toBeInTheDocument(); // Receive - expect(screen.queryByText('+3.00T TOKEN')).toBeInTheDocument(); // Mint - expect(screen.queryByText('-1.20B TOKEN')).toBeInTheDocument(); // Burn - expect(screen.queryByText('+5.00M TOKEN')).toBeInTheDocument(); // Payout - expect(screen.queryByText('-2.1 TOKEN')).toBeInTheDocument(); // Burn held balance - expect(screen.queryByText('+2.3 TOKEN')).toBeInTheDocument(); // Payout - expect(screen.queryByText('+2.4 TOKEN')).toBeInTheDocument(); // Payout - expect(screen.queryByText('+2.5 TOKEN')).toBeInTheDocument(); // Payout - expect(screen.queryByText('+2.6 TOKEN')).toBeInTheDocument(); // Payout + expect(screen.queryByText('1.00QT TOKEN')).toBeInTheDocument(); // Send + expect(screen.queryByText('2.00Q TOKEN')).toBeInTheDocument(); // Receive + expect(screen.queryByText('3.00T TOKEN')).toBeInTheDocument(); // Mint + expect(screen.queryByText('1.20B TOKEN')).toBeInTheDocument(); // Burn + expect(screen.queryByText('5.00M TOKEN')).toBeInTheDocument(); // Payout + expect(screen.queryByText('2.1 TOKEN')).toBeInTheDocument(); // Burn held balance + expect(screen.queryByText('2.3 TOKEN')).toBeInTheDocument(); // Payout + expect(screen.queryByText('2.4 TOKEN')).toBeInTheDocument(); // Payout + expect(screen.queryByText('2.5 TOKEN')).toBeInTheDocument(); // Payout + expect(screen.queryByText('2.6 TOKEN')).toBeInTheDocument(); // Payout }); test('displays loading state', () => { diff --git a/components/bank/components/historyBox.tsx b/components/bank/components/historyBox.tsx index d401c908..697c3b96 100644 --- a/components/bank/components/historyBox.tsx +++ b/components/bank/components/historyBox.tsx @@ -1,47 +1,17 @@ -import React, { useMemo, useState, useEffect } from 'react'; -import { TruncatedAddressWithCopy } from '@/components/react/addressCopy'; +import React, { useState } from 'react'; +import { TransactionAmount, TxMessage } from '../types'; +import { shiftDigits, formatLargeNumber, formatDenom } from '@/utils'; +import { getHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MetadataSDKType } from '@liftedinit/manifestjs/dist/codegen/cosmos/bank/v1beta1/bank'; +import { useTokenFactoryDenomsMetadata } from '@/hooks'; import TxInfoModal from '../modals/txInfo'; -import { shiftDigits, truncateString } from '@/utils'; -import { BurnIcon, DenomImage, formatDenom, MintIcon } from '@/components'; -import { HistoryTxType, useTokenFactoryDenomsMetadata } from '@/hooks'; -import { ReceiveIcon, SendIcon } from '@/components/icons'; - -import useIsMobile from '@/hooks/useIsMobile'; - -interface Transaction { - tx_type: HistoryTxType; - from_address: string; - to_address: string; - amount: Array<{ amount: string; denom: string }>; -} export interface TransactionGroup { tx_hash: string; block_number: number; formatted_date: string; + fee?: TransactionAmount; memo?: string; - data: Transaction; -} - -function formatLargeNumber(num: number): string { - const quintillion = 1e18; - const quadrillion = 1e15; - const trillion = 1e12; - const billion = 1e9; - const million = 1e6; - - if (num >= quintillion) { - return `${(num / quintillion).toFixed(2)}QT`; - } else if (num >= quadrillion) { - return `${(num / quadrillion).toFixed(2)}Q`; - } else if (num >= trillion) { - return `${(num / trillion).toFixed(2)}T`; - } else if (num >= billion) { - return `${(num / billion).toFixed(2)}B`; - } else if (num >= million) { - return `${(num / million).toFixed(2)}M`; - } - return num.toLocaleString(); } export function HistoryBox({ @@ -57,12 +27,12 @@ export function HistoryBox({ skeletonGroupCount, skeletonTxCount, isGroup, -}: { +}: Readonly<{ isLoading: boolean; address: string; currentPage: number; setCurrentPage: React.Dispatch>; - sendTxs: TransactionGroup[]; + sendTxs: TxMessage[]; totalPages: number; txLoading: boolean; isError: boolean; @@ -70,12 +40,11 @@ export function HistoryBox({ skeletonGroupCount: number; skeletonTxCount: number; isGroup?: boolean; -}) { - const [selectedTx, setSelectedTx] = useState(null); +}>) { + const [selectedTx, setSelectedTx] = useState(null); + const { metadatas, isMetadatasLoading } = useTokenFactoryDenomsMetadata(); - const isLoading = initialLoading || txLoading; - - const { metadatas } = useTokenFactoryDenomsMetadata(); + const isLoading = initialLoading || txLoading || isMetadatasLoading; function formatDateShort(dateString: string): string { const date = new Date(dateString); @@ -86,73 +55,19 @@ export function HistoryBox({ }); } - function getTransactionIcon(tx: TransactionGroup, address: string) { - if (tx.data.tx_type === HistoryTxType.SEND) { - return tx.data.from_address === address ? : ; - } else if (tx.data.tx_type === HistoryTxType.MINT || tx.data.tx_type === HistoryTxType.PAYOUT) { - return ( - - ); - } else if ( - tx.data.tx_type === HistoryTxType.BURN || - tx.data.tx_type === HistoryTxType.BURN_HELD_BALANCE - ) { - return ( - - ); - } - return null; - } - - // Get the history message based on the transaction type - function getTransactionMessage(tx: TransactionGroup, address: string) { - if (tx.data.tx_type === HistoryTxType.SEND) { - return tx.data.from_address === address ? 'Sent' : 'Received'; - } else if (tx.data.tx_type === HistoryTxType.MINT || tx.data.tx_type === HistoryTxType.PAYOUT) { - return 'Minted'; - } else if ( - tx.data.tx_type === HistoryTxType.BURN || - tx.data.tx_type === HistoryTxType.BURN_HELD_BALANCE - ) { - return 'Burned'; - } - return 'Unsupported'; - } - - // Get the transaction direction based on the transaction type - function getTransactionPlusMinus(tx: TransactionGroup, address: string) { - if (tx.data.tx_type === HistoryTxType.SEND) { - return tx.data.from_address === address ? '-' : '+'; - } else if (tx.data.tx_type === HistoryTxType.MINT || tx.data.tx_type === HistoryTxType.PAYOUT) { - return '+'; - } else if ( - tx.data.tx_type === HistoryTxType.BURN || - tx.data.tx_type === HistoryTxType.BURN_HELD_BALANCE - ) { - return '-'; - } - return '!!'; + function getTransactionIcon(tx: TxMessage, address: string) { + const handler = getHandler(tx.type); + const { icon: IconComponent } = handler(tx, address); + return ; } - // Get the transaction color based on the transaction type and direction - function getTransactionColor(tx: TransactionGroup, address: string) { - if (tx.data.tx_type === HistoryTxType.SEND) { - return tx.data.from_address === address ? 'text-red-500' : 'text-green-500'; - } else if (tx.data.tx_type === HistoryTxType.MINT || tx.data.tx_type === HistoryTxType.PAYOUT) { - return 'text-green-500'; - } else if ( - tx.data.tx_type === HistoryTxType.BURN || - tx.data.tx_type === HistoryTxType.BURN_HELD_BALANCE - ) { - return 'text-red-500'; - } - return null; + function getTransactionMessage(tx: TxMessage, address: string, metadata?: MetadataSDKType[]) { + const handler = getHandler(tx.type); + return handler(tx, address, metadata).message; } return ( -

@@ -200,80 +115,60 @@ export function HistoryBox({

) : ( -
+
{sendTxs?.slice(0, skeletonTxCount).map((tx, index) => (
{ setSelectedTx(tx); - (document?.getElementById(`tx_modal_info`) as HTMLDialogElement)?.showModal(); + (document?.getElementById('tx_modal_info') as HTMLDialogElement)?.showModal(); }} > -
-
+
+
{getTransactionIcon(tx, address)}
- - {tx.data.amount.map((amt, index) => { - const metadata = metadatas?.metadatas.find(m => m.base === amt.denom); - return ; - })} -
-
-

- {getTransactionMessage(tx, address)} -

-

- {tx.data.amount.map((amt, index) => { - const metadata = metadatas?.metadatas.find(m => m.base === amt.denom); - const display = metadata?.display ?? metadata?.symbol ?? ''; - return metadata?.display.startsWith('factory') - ? metadata?.display?.split('/').pop()?.toUpperCase() - : display.length > 4 - ? display.slice(0, 4).toUpperCase() + '...' - : display.toUpperCase(); - })} -

+

+ {formatDateShort(tx.timestamp)} +

+
+ + {getTransactionMessage(tx, address, metadatas?.metadatas)} +
-
e.stopPropagation()} - > - {tx.data.from_address.startsWith('manifest1') ? ( - - ) : ( -
- {tx.data.from_address} + {tx.message_index < 10000 ? ( + tx.sender === address ? ( +
+ Incl.:{' '} + {tx.fee && + formatLargeNumber( + Number(shiftDigits(tx.fee.amount?.[0]?.amount, -6)) + ) + + ' ' + + formatDenom(tx.fee.amount?.[0]?.denom)}{' '} + fee
- )} -
+ ) : null + ) : ( +
+ Fee incl. in proposal #{tx.proposal_ids} execution +
+ )}
-
-

- {formatDateShort(tx.formatted_date)} -

-

- {getTransactionPlusMinus(tx, address)} - {tx.data.amount - .map(amt => { - const metadata = metadatas?.metadatas.find(m => m.base === amt.denom); - const exponent = Number(metadata?.denom_units[1]?.exponent) || 6; - const amount = Number(shiftDigits(amt.amount, -exponent)); - return `${formatLargeNumber(amount)} ${formatDenom(amt.denom)}`; - }) - .join(', ')} -

-
+ {/* Example of placing date/ID on the right side on larger screens: +
+ Tx ID: {tx.id} +
+ */}
))}
@@ -282,7 +177,7 @@ export function HistoryBox({ )} {totalPages > 1 && ( -
+
@@ -337,7 +232,7 @@ export function HistoryBox({
)} - +
); } diff --git a/components/bank/components/index.ts b/components/bank/components/index.ts index ea097264..615509d3 100644 --- a/components/bank/components/index.ts +++ b/components/bank/components/index.ts @@ -1,13 +1,3 @@ export * from './sendBox'; export * from './tokenList'; export * from './historyBox'; - -export function formatDenom(denom: string): string { - const cleanDenom = denom.replace(/^factory\/[^/]+\//, ''); - - if (cleanDenom.startsWith('u')) { - return cleanDenom.slice(1).toUpperCase(); - } - - return cleanDenom; -} diff --git a/components/bank/handlers/bank/index.ts b/components/bank/handlers/bank/index.ts new file mode 100644 index 00000000..a23f3999 --- /dev/null +++ b/components/bank/handlers/bank/index.ts @@ -0,0 +1,2 @@ +export * from './msgSendHandler'; +export * from './msgMultiSendHandler'; diff --git a/components/bank/handlers/bank/msgMultiSendHandler.tsx b/components/bank/handlers/bank/msgMultiSendHandler.tsx new file mode 100644 index 00000000..b94f92bc --- /dev/null +++ b/components/bank/handlers/bank/msgMultiSendHandler.tsx @@ -0,0 +1,73 @@ +import { MsgMultiSend } from '@liftedinit/manifestjs/dist/codegen/cosmos/bank/v1beta1/tx'; +import { createSenderReceiverHandler } from '@/components/bank/handlers/createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { BankIcon } from '@/components/icons/BankIcon'; +import { format } from 'react-string-format'; +import { TruncatedAddressWithCopy } from '@/components/react/addressCopy'; +import { MetadataSDKType } from '@liftedinit/manifestjs/dist/codegen/cosmos/bank/v1beta1/bank'; +import { formatAmount, formatDenom, formatLargeNumber } from '@/utils'; +import React from 'react'; + +const createMessage = ( + template: string, + amount: string, + denom: string, + numReceivers: number, + color: string, + metadata?: MetadataSDKType[], + sender?: string +) => { + const formattedAmount = formatLargeNumber(formatAmount(amount, denom, metadata)); + const formattedDenom = formatDenom(denom); + const coloredAmount = ( + + {formattedAmount} {formattedDenom} + + ); + const coloredDenom = {formattedDenom}; + const message = format( + template, + coloredAmount, + numReceivers, + coloredDenom, + sender ? : 'an unknown address' + ); + return {message}; +}; + +export const MsgMultiSendHandler = createSenderReceiverHandler({ + iconSender: BankIcon, + successSender: (tx, _, metadata) => { + return createMessage( + 'You sent {0} equally divided between {1} addresses', + tx.metadata?.inputs?.[0]?.coins?.[0]?.amount, + tx.metadata?.inputs?.[0]?.coins?.[0]?.denom, + tx.metadata?.outputs?.length, + 'red', + metadata + ); + }, + failSender: (tx, _, metadata) => { + return createMessage( + 'You failed to send {0} equally divided between {1} addresses', + tx.metadata?.inputs?.[0]?.coins?.[0]?.amount, + tx.metadata?.inputs?.[0]?.coins?.[0]?.denom, + tx.metadata?.outputs?.length, + 'red', + metadata + ); + }, + successReceiver: (tx, _, metadata) => { + return createMessage( + 'You received {2} tokens from {3}', + tx.metadata?.inputs?.[0]?.coins?.[0]?.amount, + tx.metadata?.inputs?.[0]?.coins?.[0]?.denom, + tx.metadata?.outputs?.length, + 'green', + metadata, + tx.sender + ); + }, +}); + +registerHandler(MsgMultiSend.typeUrl, MsgMultiSendHandler); diff --git a/components/bank/handlers/bank/msgSendHandler.tsx b/components/bank/handlers/bank/msgSendHandler.tsx new file mode 100644 index 00000000..42928442 --- /dev/null +++ b/components/bank/handlers/bank/msgSendHandler.tsx @@ -0,0 +1,41 @@ +import { BankIcon } from '@/components/icons/BankIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgSend } from '@liftedinit/manifestjs/dist/codegen/cosmos/bank/v1beta1/tx'; +import { createTokenMessage } from '@/components'; + +export const MsgSendHandler = createSenderReceiverHandler({ + iconSender: BankIcon, + successSender: (tx, _, metadata) => { + return createTokenMessage( + 'You sent {0} to {1}', + tx.metadata?.amount?.[0]?.amount, + tx.metadata?.amount?.[0]?.denom, + tx.metadata?.toAddress, + 'red', + metadata + ); + }, + failSender: (tx, _, metadata) => { + return createTokenMessage( + 'You failed to send {0} to {1}', + tx.metadata?.amount?.[0]?.amount, + tx.metadata?.amount?.[0]?.denom, + tx.metadata?.toAddress, + 'red', + metadata + ); + }, + successReceiver: (tx, _, metadata) => { + return createTokenMessage( + 'You received {0} from {1}', + tx.metadata?.amount?.[0]?.amount, + tx.metadata?.amount?.[0]?.denom, + tx.sender, + 'green', + metadata + ); + }, +}); + +registerHandler(MsgSend.typeUrl, MsgSendHandler); diff --git a/components/bank/handlers/createMessageUtils.tsx b/components/bank/handlers/createMessageUtils.tsx new file mode 100644 index 00000000..625a414b --- /dev/null +++ b/components/bank/handlers/createMessageUtils.tsx @@ -0,0 +1,46 @@ +import React from 'react'; +import { formatAmount, formatDenom, formatLargeNumber } from '@/utils'; +import { format } from 'react-string-format'; +import { TruncatedAddressWithCopy } from '@/components/react/addressCopy'; +import { MetadataSDKType } from '@liftedinit/manifestjs/dist/codegen/cosmos/bank/v1beta1/bank'; + +export const createTokenMessage = ( + template: string, + amount: string, + denom: string, + address: string, + color: string, + metadata?: MetadataSDKType[] +) => { + const formattedAmount = formatLargeNumber(formatAmount(amount, denom, metadata)); + const formattedDenom = formatDenom(denom); + // coloredAmount is {0} + const coloredAmount = ( + + {formattedAmount} {formattedDenom} + + ); + const message = format( + template, + coloredAmount, + address ? : 'an unknown address' + ); + return {message}; +}; + +export const createValidatorMessage = ( + template: string, + validatorAddress: string, + sender?: string +) => { + const message = format( + template, + validatorAddress ? ( + + ) : ( + 'unknown' + ), + sender ? : 'an unknown address' + ); + return {message}; +}; diff --git a/components/bank/handlers/createSenderReceiverHandler.tsx b/components/bank/handlers/createSenderReceiverHandler.tsx new file mode 100644 index 00000000..a5c5bd53 --- /dev/null +++ b/components/bank/handlers/createSenderReceiverHandler.tsx @@ -0,0 +1,56 @@ +import React from 'react'; +import { MetadataSDKType } from '@liftedinit/manifestjs/dist/codegen/cosmos/bank/v1beta1/bank'; +import { QuestionIcon } from '@/components/icons/QuestionIcon'; +import { TxMessage } from '../types'; + +export function createSenderReceiverHandler({ + iconSender, + iconReceiver, + successSender, + failSender, + successReceiver, + failReceiver, +}: { + iconSender: React.ComponentType; + iconReceiver?: React.ComponentType; + successSender: + | string + | ((tx: TxMessage, address: string, metadata?: MetadataSDKType[]) => React.ReactNode); + failSender: + | string + | ((tx: TxMessage, address: string, metadata?: MetadataSDKType[]) => React.ReactNode); + successReceiver: + | string + | ((tx: TxMessage, address: string, metadata?: MetadataSDKType[]) => React.ReactNode); + failReceiver?: string | ((tx: TxMessage, address: string) => React.ReactNode); +}) { + return (tx: TxMessage, address: string, metadata?: MetadataSDKType[]) => { + const isSender = tx.sender === address; + const hasError = !!tx.error; + + iconSender = iconSender ?? QuestionIcon; + iconReceiver = iconReceiver ?? iconSender ?? QuestionIcon; + + const resolveMessage = ( + msg: + | React.ReactNode + | ((tx: TxMessage, address: string, metadata?: MetadataSDKType[]) => React.ReactNode) + ) => (typeof msg === 'function' ? msg(tx, address, metadata) : msg); + + const successSenderMsg = resolveMessage(successSender); + const failSenderMsg = resolveMessage(failSender); + const successReceiverMsg = resolveMessage(successReceiver); + const failReceiverMsg = resolveMessage(failReceiver ?? 'Anomaly detected'); + + return { + icon: isSender ? iconSender : iconReceiver, + message: hasError + ? isSender + ? failSenderMsg + : failReceiverMsg + : isSender + ? successSenderMsg + : successReceiverMsg, + }; + }; +} diff --git a/components/bank/handlers/defaultHandler.tsx b/components/bank/handlers/defaultHandler.tsx new file mode 100644 index 00000000..339be9d7 --- /dev/null +++ b/components/bank/handlers/defaultHandler.tsx @@ -0,0 +1,9 @@ +import { createSenderReceiverHandler } from '@/components/bank/handlers/createSenderReceiverHandler'; +import { QuestionIcon } from '@/components/icons/QuestionIcon'; + +export const DefaultHandler = createSenderReceiverHandler({ + iconSender: QuestionIcon, + successSender: 'Unknown transaction type', + failSender: 'Unknown transaction type', + successReceiver: 'Unknown transaction type', +}); diff --git a/components/bank/handlers/group/index.ts b/components/bank/handlers/group/index.ts new file mode 100644 index 00000000..eb34735c --- /dev/null +++ b/components/bank/handlers/group/index.ts @@ -0,0 +1,14 @@ +export * from './msgExecHandler'; +export * from './msgCreateGroupWithPolicyHandler'; +export * from './msgSubmitProposalHandler'; +export * from './msgVoteHandler'; +export * from './msgWithdrawProposalHandler'; +export * from './msgUpdateGroupMetadataHandler'; +export * from './msgUpdateGroupPolicyMetadataHandler'; +export * from './msgUpdateGroupPolicyDecisionPolicyHandler'; +export * from './msgLeaveGroupHandler'; +export * from './msgUpdateGroupMembersHandler'; +export * from './msgCreateGroupHandler'; +export * from './msgCreateGroupPolicyHandler'; +export * from './msgUpdateGroupAdminHandler'; +export * from './msgUpdateGroupPolicyAdminHandler'; diff --git a/components/bank/handlers/group/metadata.ts b/components/bank/handlers/group/metadata.ts new file mode 100644 index 00000000..896a0b74 --- /dev/null +++ b/components/bank/handlers/group/metadata.ts @@ -0,0 +1,29 @@ +import { truncateString } from '@/utils'; +import { ThresholdDecisionPolicy } from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/types'; +import { PercentageDecisionPolicy } from 'cosmjs-types/cosmos/group/v1/types'; + +export function getGroupTitle(metadata: string): string | undefined { + let title = ''; + + try { + const parsed = JSON.parse(metadata); + title = parsed.title || title; + } catch (e) {} + + if (title === '') { + return undefined; + } + + return truncateString(title, 24); +} + +export function getGroupPolicy(policyType: string): string { + switch (policyType) { + case ThresholdDecisionPolicy.typeUrl: + return 'threshold'; + case PercentageDecisionPolicy.typeUrl: + return 'percentage'; + default: + return 'unknown'; + } +} diff --git a/components/bank/handlers/group/msgCreateGroupHandler.tsx b/components/bank/handlers/group/msgCreateGroupHandler.tsx new file mode 100644 index 00000000..32f11518 --- /dev/null +++ b/components/bank/handlers/group/msgCreateGroupHandler.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import { createSenderReceiverHandler } from '@/components/bank/handlers/createSenderReceiverHandler'; +import { GroupsIcon } from '@/components/icons/GroupsIcon'; +import { format } from 'react-string-format'; +import { MsgCreateGroup } from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/tx'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; + +const createMessage = (template: string, numMembers: number) => { + const message = format(template, numMembers); + return {message}; +}; + +export const MsgCreateGroupHandler = createSenderReceiverHandler({ + iconSender: GroupsIcon, + successSender: tx => { + return createMessage('You created a group with {0} members', tx.metadata?.members?.length); + }, + failSender: tx => { + return createMessage( + 'You failed to create a group with {0} members', + tx.metadata?.members?.length + ); + }, + successReceiver: tx => { + return createMessage( + 'You were added to a group with {0} members', + tx.metadata?.members?.length + ); + }, +}); + +registerHandler(MsgCreateGroup.typeUrl, MsgCreateGroupHandler); diff --git a/components/bank/handlers/group/msgCreateGroupPolicyHandler.tsx b/components/bank/handlers/group/msgCreateGroupPolicyHandler.tsx new file mode 100644 index 00000000..9d73d712 --- /dev/null +++ b/components/bank/handlers/group/msgCreateGroupPolicyHandler.tsx @@ -0,0 +1,39 @@ +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { GroupsIcon } from '@/components/icons/GroupsIcon'; +import { MsgCreateGroupPolicy } from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/tx'; +import { createSenderReceiverHandler } from '@/components/bank/handlers/createSenderReceiverHandler'; +import { format } from 'react-string-format'; +import { getGroupPolicy } from '@/components/bank/handlers/group/metadata'; + +const createMessage = (template: string, policyType: string, groupId: string) => { + const policy = getGroupPolicy(policyType); + const message = format(template, policy, groupId); + return {message}; +}; + +export const MsgCreateGroupPolicyHandler = createSenderReceiverHandler({ + iconSender: GroupsIcon, + successSender: tx => { + return createMessage( + 'You created a {0} decision policy for group #{1}', + tx.metadata?.decisionPolicy?.['@type'], + tx.metadata?.groupId + ); + }, + failSender: tx => { + return createMessage( + 'You failed to create a {0} decision policy for group #{1}', + tx.metadata?.decisionPolicy?.['@type'], + tx.metadata?.groupId + ); + }, + successReceiver: tx => { + return createMessage( + 'A {0} decision policy was created for group #{1}', + tx.metadata?.decisionPolicy?.['@type'], + tx.metadata?.groupId + ); + }, +}); + +registerHandler(MsgCreateGroupPolicy.typeUrl, MsgCreateGroupPolicyHandler); diff --git a/components/bank/handlers/group/msgCreateGroupWithPolicyHandler.tsx b/components/bank/handlers/group/msgCreateGroupWithPolicyHandler.tsx new file mode 100644 index 00000000..b27c8edd --- /dev/null +++ b/components/bank/handlers/group/msgCreateGroupWithPolicyHandler.tsx @@ -0,0 +1,24 @@ +import { GroupsIcon } from '@/components/icons/GroupsIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgCreateGroupWithPolicy } from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/tx'; +import { getGroupTitle } from '@/components/bank/handlers/group/metadata'; +import { format } from 'react-string-format'; + +const createMessage = (template: string, metadata: any) => { + const title = getGroupTitle(metadata); + const named = title ? `named: ${title}` : 'with an unknown name'; + const message = format(template, named); + return {message}; +}; + +export const MsgCreateGroupWithPolicyHandler = createSenderReceiverHandler({ + iconSender: GroupsIcon, + successSender: tx => createMessage('You created a new group {0}', tx.metadata?.groupMetadata), + failSender: tx => + createMessage('You failed to create a new group {0}', tx.metadata?.groupMetadata), + successReceiver: tx => + createMessage('You were mentioned in a new group {0}', tx.metadata?.groupMetadata), +}); + +registerHandler(MsgCreateGroupWithPolicy.typeUrl, MsgCreateGroupWithPolicyHandler); diff --git a/components/bank/handlers/group/msgExecHandler.tsx b/components/bank/handlers/group/msgExecHandler.tsx new file mode 100644 index 00000000..cd594539 --- /dev/null +++ b/components/bank/handlers/group/msgExecHandler.tsx @@ -0,0 +1,27 @@ +import { GroupsIcon } from '@/components/icons/GroupsIcon'; +import { MsgExec } from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/tx'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '../handlerRegistry'; +import { TruncatedAddressWithCopy } from '@/components/react/addressCopy'; +import { format } from 'react-string-format'; + +const createMessage = (template: string, id: string, sender?: string) => { + const message = format( + template, + id ?? 'unknown', + sender ? : 'an unknown address' + ); + return {message}; +}; + +export const MsgExecHandler = createSenderReceiverHandler({ + iconSender: GroupsIcon, + successSender: tx => createMessage('You executed proposal #{0}', tx.proposal_ids?.[0]), // TODO Link to proposal + failSender: tx => createMessage('You failed to execute proposal #{0}', tx.proposal_ids?.[0]), // TODO Link to proposal + successReceiver: tx => + createMessage('Proposal #{0} was executed by {1}', tx.proposal_ids?.[0], tx.sender), // TODO Link to proposal + failReceiver: tx => + createMessage('Proposal #{0} failed to be executed by {1}', tx.proposal_ids?.[0], tx.sender), // TODO Link to proposal +}); + +registerHandler(MsgExec.typeUrl, MsgExecHandler); diff --git a/components/bank/handlers/group/msgLeaveGroupHandler.tsx b/components/bank/handlers/group/msgLeaveGroupHandler.tsx new file mode 100644 index 00000000..10730f2d --- /dev/null +++ b/components/bank/handlers/group/msgLeaveGroupHandler.tsx @@ -0,0 +1,13 @@ +import { GroupsIcon } from '@/components/icons/GroupsIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgLeaveGroup } from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/tx'; + +export const MsgLeaveGroupHandler = createSenderReceiverHandler({ + iconSender: GroupsIcon, + successSender: tx => `You left group #${tx.metadata?.groupId}`, + failSender: tx => `You failed to leave group #${tx.metadata?.groupId}`, + successReceiver: tx => `Group #${tx.metadata?.groupId} had a member leave`, +}); + +registerHandler(MsgLeaveGroup.typeUrl, MsgLeaveGroupHandler); diff --git a/components/bank/handlers/group/msgSubmitProposalHandler.tsx b/components/bank/handlers/group/msgSubmitProposalHandler.tsx new file mode 100644 index 00000000..2ccc2f63 --- /dev/null +++ b/components/bank/handlers/group/msgSubmitProposalHandler.tsx @@ -0,0 +1,22 @@ +import { GroupsIcon } from '@/components/icons/GroupsIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgSubmitProposal } from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/tx'; +import { TruncatedAddressWithCopy } from '@/components/react/addressCopy'; +import { format } from 'react-string-format'; + +const createMessage = (template: string, ids: string, sender: string) => { + const message = format(template, ids, ); + return {message}; +}; + +export const MsgSubmitProposalHandler = createSenderReceiverHandler({ + iconSender: GroupsIcon, + successSender: tx => + createMessage('You submitted proposal #{0} to {1}', tx.proposal_ids?.[0], tx.sender), // TODO Link to proposal + failSender: 'You failed to submit a proposal', + successReceiver: tx => + createMessage('Proposal #{0} was submitted by {1}', tx.proposal_ids?.[0], tx.sender), // TODO Link to proposal +}); + +registerHandler(MsgSubmitProposal.typeUrl, MsgSubmitProposalHandler); diff --git a/components/bank/handlers/group/msgUpdateGroupAdminHandler.tsx b/components/bank/handlers/group/msgUpdateGroupAdminHandler.tsx new file mode 100644 index 00000000..814b17d1 --- /dev/null +++ b/components/bank/handlers/group/msgUpdateGroupAdminHandler.tsx @@ -0,0 +1,42 @@ +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgUpdateGroupAdmin } from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/tx'; +import { format } from 'react-string-format'; +import { createSenderReceiverHandler } from '@/components/bank/handlers/createSenderReceiverHandler'; +import { GroupsIcon } from '@/components/icons/GroupsIcon'; +import { TruncatedAddressWithCopy } from '@/components/react/addressCopy'; + +const createMessage = (template: string, groupId: number, newAdmin: string) => { + const message = format( + template, + groupId, + newAdmin ? : 'an unknown address' + ); + return {message}; +}; + +export const MsgUpdateGroupAdminHandler = createSenderReceiverHandler({ + iconSender: GroupsIcon, + successSender: tx => { + return createMessage( + 'You updated the administrator of group #{0} to {1}', + tx.metadata?.groupId, + tx.metadata?.newAdmin + ); + }, + failSender: tx => { + return createMessage( + 'You failed to update the administrator of group #{0} to {1}', + tx.metadata?.groupId, + tx.metadata?.newAdmin + ); + }, + successReceiver: tx => { + return createMessage( + 'You were made administrator of group #{0}', + tx.metadata?.groupId, + tx.metadata?.newAdmin + ); + }, +}); + +registerHandler(MsgUpdateGroupAdmin.typeUrl, MsgUpdateGroupAdminHandler); diff --git a/components/bank/handlers/group/msgUpdateGroupMembersHandler.tsx b/components/bank/handlers/group/msgUpdateGroupMembersHandler.tsx new file mode 100644 index 00000000..ed71092f --- /dev/null +++ b/components/bank/handlers/group/msgUpdateGroupMembersHandler.tsx @@ -0,0 +1,19 @@ +import { GroupsIcon } from '@/components/icons/GroupsIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgUpdateGroupMembers } from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/tx'; +import { format } from 'react-string-format'; + +const createMessage = (template: string, groupId: string) => { + const message = format(template, groupId); + return {message}; +}; + +export const MsgUpdateGroupMembersHandler = createSenderReceiverHandler({ + iconSender: GroupsIcon, + successSender: tx => createMessage('You updated the members of group #{0}', tx.metadata?.groupId), + failSender: 'You failed to update group members', + successReceiver: tx => createMessage('Group #{0} had its members updated', tx.metadata.groupId), +}); + +registerHandler(MsgUpdateGroupMembers.typeUrl, MsgUpdateGroupMembersHandler); diff --git a/components/bank/handlers/group/msgUpdateGroupMetadataHandler.tsx b/components/bank/handlers/group/msgUpdateGroupMetadataHandler.tsx new file mode 100644 index 00000000..275e2fc2 --- /dev/null +++ b/components/bank/handlers/group/msgUpdateGroupMetadataHandler.tsx @@ -0,0 +1,13 @@ +import { GroupsIcon } from '@/components/icons/GroupsIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgUpdateGroupMetadata } from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/tx'; + +export const MsgUpdateGroupMetadataHandler = createSenderReceiverHandler({ + iconSender: GroupsIcon, + successSender: tx => <>You updated the metadata of group #{tx.metadata?.groupId}, + failSender: tx => <>You failed to update the metadata of group #{tx.metadata?.groupId}, + successReceiver: tx => <>Group #{tx.metadata?.groupId} had its metadata updated, +}); + +registerHandler(MsgUpdateGroupMetadata.typeUrl, MsgUpdateGroupMetadataHandler); diff --git a/components/bank/handlers/group/msgUpdateGroupPolicyAdminHandler.tsx b/components/bank/handlers/group/msgUpdateGroupPolicyAdminHandler.tsx new file mode 100644 index 00000000..38e80c9c --- /dev/null +++ b/components/bank/handlers/group/msgUpdateGroupPolicyAdminHandler.tsx @@ -0,0 +1,53 @@ +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { GroupsIcon } from '@/components/icons/GroupsIcon'; +import { MsgUpdateGroupPolicyAdmin } from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/tx'; +import { createSenderReceiverHandler } from '@/components/bank/handlers/createSenderReceiverHandler'; +import { format } from 'react-string-format'; +import { TruncatedAddressWithCopy } from '@/components/react/addressCopy'; + +const createMessage = ( + template: string, + groupPolicyAddr: string, + newAdmin: string, + sender?: string +) => { + const message = format( + template, + groupPolicyAddr ? ( + + ) : ( + 'an unknown address' + ), + newAdmin ? : 'an unknown address', + sender ? : 'an unknown address' + ); + return {message}; +}; + +export const MsgUpdateGroupPolicyAdminHandler = createSenderReceiverHandler({ + iconSender: GroupsIcon, + successSender: tx => { + return createMessage( + 'You updated the group policy {0} administrator to {1}', + tx.metadata?.groupPolicyAddress, + tx.metadata?.newAdmin + ); + }, + failSender: tx => { + return createMessage( + 'You failed to update the group policy {0} administrator to {1}', + tx.metadata?.groupPolicyAddress, + tx.metadata?.newAdmin + ); + }, + successReceiver: tx => { + return createMessage( + 'You were made administrator of group policy {0} by {2}', + tx.metadata?.groupPolicyAddress, + tx.metadata?.newAdmin, + tx.sender + ); + }, +}); + +registerHandler(MsgUpdateGroupPolicyAdmin.typeUrl, MsgUpdateGroupPolicyAdminHandler); diff --git a/components/bank/handlers/group/msgUpdateGroupPolicyDecisionPolicyHandler.tsx b/components/bank/handlers/group/msgUpdateGroupPolicyDecisionPolicyHandler.tsx new file mode 100644 index 00000000..ae5a9fa5 --- /dev/null +++ b/components/bank/handlers/group/msgUpdateGroupPolicyDecisionPolicyHandler.tsx @@ -0,0 +1,32 @@ +import { GroupsIcon } from '@/components/icons/GroupsIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgUpdateGroupPolicyDecisionPolicy } from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/tx'; +import { TruncatedAddressWithCopy } from '@/components/react/addressCopy'; +import { format } from 'react-string-format'; + +const createMessage = (template: string, policyAddress: string) => { + const message = format( + template, + policyAddress ? : 'unknown' + ); + return {message}; +}; + +export const MsgUpdateGroupPolicyDecisionPolicyHandler = createSenderReceiverHandler({ + iconSender: GroupsIcon, + successSender: tx => + createMessage('You updated the decision policy of group {0}', tx.metadata?.groupPolicyAddress), + failSender: tx => + createMessage( + 'You failed to update the decision policy of group {0}', + tx.metadata?.groupPolicyAddress + ), + successReceiver: tx => + createMessage('Group {0} had its decision policy updated', tx.metadata.groupPolicyAddress), +}); + +registerHandler( + MsgUpdateGroupPolicyDecisionPolicy.typeUrl, + MsgUpdateGroupPolicyDecisionPolicyHandler +); diff --git a/components/bank/handlers/group/msgUpdateGroupPolicyMetadataHandler.tsx b/components/bank/handlers/group/msgUpdateGroupPolicyMetadataHandler.tsx new file mode 100644 index 00000000..9d3372fc --- /dev/null +++ b/components/bank/handlers/group/msgUpdateGroupPolicyMetadataHandler.tsx @@ -0,0 +1,27 @@ +import { GroupsIcon } from '@/components/icons/GroupsIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgUpdateGroupPolicyMetadata } from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/tx'; +import { TruncatedAddressWithCopy } from '@/components/react/addressCopy'; + +const createMessage = (prefix: string, policyAddress: string, suffix?: string) => { + return ( + + {prefix}{' '} + {policyAddress ? : 'unknown'}{' '} + {suffix} + + ); +}; + +export const MsgUpdateGroupPolicyMetadataHandler = createSenderReceiverHandler({ + iconSender: GroupsIcon, + successSender: tx => + createMessage('You updated the policy metadata of group', tx.metadata?.groupPolicyAddress), + failSender: tx => + createMessage('You failed to update policy metadata of group', tx.metadata?.groupPolicyAddress), + successReceiver: tx => + createMessage('Group', tx.metadata.groupPolicyAddress, 'had its policy metadata updated'), +}); + +registerHandler(MsgUpdateGroupPolicyMetadata.typeUrl, MsgUpdateGroupPolicyMetadataHandler); diff --git a/components/bank/handlers/group/msgVoteHandler.tsx b/components/bank/handlers/group/msgVoteHandler.tsx new file mode 100644 index 00000000..9172465b --- /dev/null +++ b/components/bank/handlers/group/msgVoteHandler.tsx @@ -0,0 +1,38 @@ +import { GroupsIcon } from '@/components/icons/GroupsIcon'; +import { formatVote } from '@/utils'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgVote } from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/tx'; +import { TruncatedAddressWithCopy } from '@/components/react/addressCopy'; +import { format } from 'react-string-format'; + +const createMessage = (template: string, vote: string, ids: string, sender?: string) => { + const message = format( + template, + formatVote(vote), + ids, + sender ? : 'an unknown address' + ); + return {message}; +}; + +export const MsgVoteHandler = createSenderReceiverHandler({ + iconSender: GroupsIcon, + successSender: tx => + createMessage('You voted {0} on proposal #{1}', tx.metadata?.option, tx.proposal_ids?.[0]), // TODO Link to proposal + failSender: tx => + createMessage( + 'You failed to vote {0} on proposal #{1}', + tx.metadata?.option, + tx.proposal_ids?.[0] + ), // TODO Link to proposal + successReceiver: tx => + createMessage( + 'Proposal #{1} was voted on {0} by {2}', + tx.metadata?.option, + tx.proposal_ids?.[0], + tx.sender + ), // TODO Link to proposal +}); + +registerHandler(MsgVote.typeUrl, MsgVoteHandler); diff --git a/components/bank/handlers/group/msgWithdrawProposalHandler.tsx b/components/bank/handlers/group/msgWithdrawProposalHandler.tsx new file mode 100644 index 00000000..6e0ae86d --- /dev/null +++ b/components/bank/handlers/group/msgWithdrawProposalHandler.tsx @@ -0,0 +1,25 @@ +import { GroupsIcon } from '@/components/icons/GroupsIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgWithdrawProposal } from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/tx'; +import { TruncatedAddressWithCopy } from '@/components/react/addressCopy'; +import { format } from 'react-string-format'; + +const createMessage = (template: string, ids: string, sender?: string) => { + const message = format( + template, + ids, + sender ? : 'an unknown address' + ); + return {message}; +}; + +export const MsgWithdrawProposalHandler = createSenderReceiverHandler({ + iconSender: GroupsIcon, + successSender: tx => createMessage('You withdrew proposal #{0}', tx.proposal_ids?.[0]), // TODO Link to proposal + failSender: tx => createMessage('You failed to withdraw proposal #{0}', tx.proposal_ids?.[0]), // TODO Link to proposal + successReceiver: tx => + createMessage('Proposal #{0} was withdrawn by {1}', tx.proposal_ids?.[0], tx.sender), // TODO Link to proposal +}); + +registerHandler(MsgWithdrawProposal.typeUrl, MsgWithdrawProposalHandler); diff --git a/components/bank/handlers/handlerRegistry.ts b/components/bank/handlers/handlerRegistry.ts new file mode 100644 index 00000000..51f0abdb --- /dev/null +++ b/components/bank/handlers/handlerRegistry.ts @@ -0,0 +1,24 @@ +import React from 'react'; +import { QuestionIcon } from '@/components/icons'; +import { MetadataSDKType } from '@liftedinit/manifestjs/dist/codegen/cosmos/bank/v1beta1/bank'; +import { TxMessage } from '../types'; +import { DefaultHandler } from '@/components/bank/handlers/defaultHandler'; + +export type Handler = ( + tx: TxMessage, + address: string, + metadata?: MetadataSDKType[] +) => { + icon: React.ComponentType; + message: React.ReactNode; +}; + +const handlerRegistry: { [key: string]: Handler } = {}; + +export function registerHandler(typeUrl: string, handler: Handler) { + handlerRegistry[typeUrl] = handler; +} + +export function getHandler(typeUrl: string): Handler { + return handlerRegistry[typeUrl] || DefaultHandler; +} diff --git a/components/bank/handlers/ibc/index.ts b/components/bank/handlers/ibc/index.ts new file mode 100644 index 00000000..25511874 --- /dev/null +++ b/components/bank/handlers/ibc/index.ts @@ -0,0 +1 @@ +export * from './msgTransferHandler'; diff --git a/components/bank/handlers/ibc/msgTransferHandler.tsx b/components/bank/handlers/ibc/msgTransferHandler.tsx new file mode 100644 index 00000000..5cf46d06 --- /dev/null +++ b/components/bank/handlers/ibc/msgTransferHandler.tsx @@ -0,0 +1,38 @@ +import { TransferIcon } from '@/components/icons/TransferIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgTransfer } from '@liftedinit/manifestjs/dist/codegen/ibc/applications/transfer/v1/tx'; +import { createTokenMessage } from '@/components'; + +export const MsgTransferHandler = createSenderReceiverHandler({ + iconSender: TransferIcon, + successSender: (tx, _, metadata) => + createTokenMessage( + 'You sent {0} to {1} via IBC', + tx.metadata?.token?.amount, + tx.metadata?.token?.denom, + tx.metadata?.receiver, + 'red', + metadata + ), + failSender: (tx, _, metadata) => + createTokenMessage( + 'You failed to send {0} to {1} via IBC', + tx.metadata?.token?.amount, + tx.metadata?.token?.denom, + tx.metadata?.receiver, + 'red', + metadata + ), + successReceiver: (tx, _, metadata) => + createTokenMessage( + 'You received {0} from {1} via IBC', + tx.metadata?.token?.amount, + tx.metadata?.token?.denom, + tx.sender, + 'green', + metadata + ), +}); + +registerHandler(MsgTransfer.typeUrl, MsgTransferHandler); diff --git a/components/bank/handlers/index.ts b/components/bank/handlers/index.ts new file mode 100644 index 00000000..c14d6474 --- /dev/null +++ b/components/bank/handlers/index.ts @@ -0,0 +1,9 @@ +export * from './bank'; +export * from './ibc'; +export * from './tokenfactory'; +export * from './manifest'; +export * from './group'; +export * from './upgrade'; +export * from './poa'; +export { createTokenMessage } from '@/components/bank/handlers/createMessageUtils'; +export { createValidatorMessage } from '@/components/bank/handlers/createMessageUtils'; diff --git a/components/bank/handlers/manifest/index.ts b/components/bank/handlers/manifest/index.ts new file mode 100644 index 00000000..10f49cde --- /dev/null +++ b/components/bank/handlers/manifest/index.ts @@ -0,0 +1,2 @@ +export * from './msgPayoutHandler'; +export * from './msgBurnHeldBalanceHandler'; diff --git a/components/bank/handlers/manifest/msgBurnHeldBalanceHandler.tsx b/components/bank/handlers/manifest/msgBurnHeldBalanceHandler.tsx new file mode 100644 index 00000000..23dfd3c9 --- /dev/null +++ b/components/bank/handlers/manifest/msgBurnHeldBalanceHandler.tsx @@ -0,0 +1,30 @@ +import { BurnIcon } from '@/components/icons/BurnIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgBurnHeldBalance } from '@liftedinit/manifestjs/dist/codegen/liftedinit/manifest/v1/tx'; +import { createTokenMessage } from '@/components'; + +export const MsgBurnHeldBalanceHandler = createSenderReceiverHandler({ + iconSender: BurnIcon, + successSender: (tx, _, metadata) => + createTokenMessage( + 'You burned {0} from {1}', + tx.metadata?.burnCoins?.[0]?.amount, + tx.metadata?.burnCoins?.[0]?.denom, + tx.sender, + 'red', + metadata + ), + failSender: 'You failed to burn tokens', + successReceiver: (tx, _, metadata) => + createTokenMessage( + 'You were burned {0} by {1}', + tx.metadata?.burnCoins?.[0]?.amount, + tx.metadata?.burnCoins?.[0]?.denom, + tx.sender, + 'red', + metadata + ), +}); + +registerHandler(MsgBurnHeldBalance.typeUrl, MsgBurnHeldBalanceHandler); diff --git a/components/bank/handlers/manifest/msgPayoutHandler.tsx b/components/bank/handlers/manifest/msgPayoutHandler.tsx new file mode 100644 index 00000000..8997a56c --- /dev/null +++ b/components/bank/handlers/manifest/msgPayoutHandler.tsx @@ -0,0 +1,45 @@ +import { MintIcon } from '@/components/icons/MintIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgPayout } from '@liftedinit/manifestjs/dist/codegen/liftedinit/manifest/v1/tx'; +import { TruncatedAddressWithCopy } from '@/components/react/addressCopy'; +import { createTokenMessage } from '@/components'; +import { format } from 'react-string-format'; + +export const MsgPayoutHandler = createSenderReceiverHandler({ + iconSender: MintIcon, + successSender: (tx, _, metadata) => { + return tx.metadata?.payoutPairs?.length > 1 + ? format('You minted tokens to {0} addresses', tx.metadata?.payoutPairs?.length) + : createTokenMessage( + 'You minted {0} to {1}', + tx.metadata?.payoutPairs?.[0]?.coin?.amount, + tx.metadata?.payoutPairs?.[0]?.coin?.denom, + tx.metadata?.payoutPairs?.[0]?.address, + 'green', + metadata + ); + }, + failSender: 'You failed to mint tokens', + successReceiver: (tx, _, metadata) => { + return tx.metadata?.payoutPairs?.length > 1 + ? format( + 'You were minted tokens by {0}', + tx.sender ? ( + + ) : ( + 'an unknown address' + ) + ) + : createTokenMessage( + 'You were minted {0} by {1}', + tx.metadata?.payoutPairs?.[0]?.coin?.amount, + tx.metadata?.payoutPairs?.[0]?.coin?.denom, + tx.sender, + 'green', + metadata + ); + }, +}); + +registerHandler(MsgPayout.typeUrl, MsgPayoutHandler); diff --git a/components/bank/handlers/poa/index.ts b/components/bank/handlers/poa/index.ts new file mode 100644 index 00000000..48428433 --- /dev/null +++ b/components/bank/handlers/poa/index.ts @@ -0,0 +1,4 @@ +export * from './msgSetPowerHandler'; +export * from './msgCreateValidatorHandler'; +export * from './msgRemovePendingValidatorHandler'; +export * from './msgRemoveValidatorHandler'; diff --git a/components/bank/handlers/poa/msgCreateValidatorHandler.tsx b/components/bank/handlers/poa/msgCreateValidatorHandler.tsx new file mode 100644 index 00000000..919974af --- /dev/null +++ b/components/bank/handlers/poa/msgCreateValidatorHandler.tsx @@ -0,0 +1,21 @@ +import { AdminsIcon } from '@/components/icons/AdminsIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgCreateValidator } from '@liftedinit/manifestjs/dist/codegen/strangelove_ventures/poa/v1/tx'; +import { createValidatorMessage } from '@/components'; + +export const MsgCreateValidatorHandler = createSenderReceiverHandler({ + iconSender: AdminsIcon, + successSender: tx => + createValidatorMessage('You created validator {0}', tx.metadata?.validatorAddress), + failSender: tx => + createValidatorMessage('You failed to create validator {0}', tx.metadata?.validatorAddress), + successReceiver: tx => + createValidatorMessage( + 'Validator {0} was created by {1}', + tx.metadata.validatorAddress, + tx.sender + ), +}); + +registerHandler(MsgCreateValidator.typeUrl, MsgCreateValidatorHandler); diff --git a/components/bank/handlers/poa/msgRemovePendingValidatorHandler.tsx b/components/bank/handlers/poa/msgRemovePendingValidatorHandler.tsx new file mode 100644 index 00000000..ad0cde94 --- /dev/null +++ b/components/bank/handlers/poa/msgRemovePendingValidatorHandler.tsx @@ -0,0 +1,24 @@ +import { AdminsIcon } from '@/components/icons/AdminsIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgRemovePending } from '@liftedinit/manifestjs/dist/codegen/strangelove_ventures/poa/v1/tx'; +import { createValidatorMessage } from '@/components'; + +export const MsgRemovePendingValidatorHandler = createSenderReceiverHandler({ + iconSender: AdminsIcon, + successSender: tx => + createValidatorMessage('You removed pending validator {0}', tx.metadata?.validatorAddress), + failSender: tx => + createValidatorMessage( + 'You failed to remove pending validator {0}', + tx.metadata?.validatorAddress + ), + successReceiver: tx => + createValidatorMessage( + 'Validator {0} was removed from pending by {1}', + tx.metadata?.validatorAddress, + tx.sender + ), +}); + +registerHandler(MsgRemovePending.typeUrl, MsgRemovePendingValidatorHandler); diff --git a/components/bank/handlers/poa/msgRemoveValidatorHandler.tsx b/components/bank/handlers/poa/msgRemoveValidatorHandler.tsx new file mode 100644 index 00000000..47f2769c --- /dev/null +++ b/components/bank/handlers/poa/msgRemoveValidatorHandler.tsx @@ -0,0 +1,21 @@ +import { AdminsIcon } from '@/components/icons/AdminsIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgRemoveValidator } from '@liftedinit/manifestjs/dist/codegen/strangelove_ventures/poa/v1/tx'; +import { createValidatorMessage } from '@/components'; + +export const MsgRemoveValidatorHandler = createSenderReceiverHandler({ + iconSender: AdminsIcon, + successSender: tx => + createValidatorMessage('You removed validator {0}', tx.metadata?.validatorAddress), + failSender: tx => + createValidatorMessage('You failed to remove validator {0}', tx.metadata?.validatorAddress), + successReceiver: tx => + createValidatorMessage( + 'Validator {0} was removed by {1}', + tx.metadata?.validatorAddress, + tx.sender + ), +}); + +registerHandler(MsgRemoveValidator.typeUrl, MsgRemoveValidatorHandler); diff --git a/components/bank/handlers/poa/msgSetPowerHandler.tsx b/components/bank/handlers/poa/msgSetPowerHandler.tsx new file mode 100644 index 00000000..4513d4eb --- /dev/null +++ b/components/bank/handlers/poa/msgSetPowerHandler.tsx @@ -0,0 +1,42 @@ +import { AdminsIcon } from '@/components/icons/AdminsIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgSetPower } from '@liftedinit/manifestjs/dist/codegen/strangelove_ventures/poa/v1/tx'; +import { TruncatedAddressWithCopy } from '@/components/react/addressCopy'; +import { format } from 'react-string-format'; + +const createMessage = (template: string, validatorAddress: string, power: number) => { + const message = format( + template, + validatorAddress ? ( + + ) : ( + 'unknown' + ), + power + ); + return {message}; +}; +export const MsgSetPowerHandler = createSenderReceiverHandler({ + iconSender: AdminsIcon, + successSender: tx => + createMessage( + 'You set the validator {0} power to {1}', + tx.metadata?.validatorAddress, + tx.metadata?.power + ), + failSender: tx => + createMessage( + 'You failed to set the validator {0} power to {1}', + tx.metadata?.validatorAddress, + tx.metadata?.power + ), + successReceiver: tx => + createMessage( + 'Validator {0} had its power set to {1}', + tx.metadata?.validatorAddress, + tx.metadata?.power + ), +}); + +registerHandler(MsgSetPower.typeUrl, MsgSetPowerHandler); diff --git a/components/bank/handlers/tokenfactory/index.ts b/components/bank/handlers/tokenfactory/index.ts new file mode 100644 index 00000000..5397f761 --- /dev/null +++ b/components/bank/handlers/tokenfactory/index.ts @@ -0,0 +1,5 @@ +export * from './msgMintHandler'; +export * from './msgBurnHandler'; +export * from './msgChangeAdminHandler'; +export * from './msgCreateDenomHandler'; +export * from './msgSetDenomMetadataHandler'; diff --git a/components/bank/handlers/tokenfactory/msgBurnHandler.tsx b/components/bank/handlers/tokenfactory/msgBurnHandler.tsx new file mode 100644 index 00000000..d6b255bd --- /dev/null +++ b/components/bank/handlers/tokenfactory/msgBurnHandler.tsx @@ -0,0 +1,38 @@ +import { FactoryIcon } from '@/components/icons/FactoryIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgBurn } from '@liftedinit/manifestjs/dist/codegen/osmosis/tokenfactory/v1beta1/tx'; +import { createTokenMessage } from '@/components'; + +export const MsgBurnHandler = createSenderReceiverHandler({ + iconSender: FactoryIcon, + successSender: (tx, _, metadata) => + createTokenMessage( + 'You burned {0} from {1}', + tx.metadata?.amount?.amount, + tx.metadata?.amount?.denom, + tx.metadata?.burnFromAddress, + 'red', + metadata + ), + failSender: (tx, _, metadata) => + createTokenMessage( + 'You failed to burn {0} from {1}', + tx.metadata?.amount?.amount, + tx.metadata?.amount?.denom, + tx.metadata?.burnFromAddress, + 'red', + metadata + ), + successReceiver: (tx, _, metadata) => + createTokenMessage( + 'You were burned {0} by {1}', + tx.metadata?.amount?.amount, + tx.metadata?.amount?.denom, + tx.sender, + 'red', + metadata + ), +}); + +registerHandler(MsgBurn.typeUrl, MsgBurnHandler); diff --git a/components/bank/handlers/tokenfactory/msgChangeAdminHandler.tsx b/components/bank/handlers/tokenfactory/msgChangeAdminHandler.tsx new file mode 100644 index 00000000..4144e180 --- /dev/null +++ b/components/bank/handlers/tokenfactory/msgChangeAdminHandler.tsx @@ -0,0 +1,40 @@ +import { TransferIcon } from '@/components/icons/TransferIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { formatDenom } from '@/utils'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgChangeAdmin } from '@liftedinit/manifestjs/dist/codegen/osmosis/tokenfactory/v1beta1/tx'; +import { TruncatedAddressWithCopy } from '@/components/react/addressCopy'; +import { format } from 'react-string-format'; + +const createMessage = (template: string, newAdmin: string, denom: string) => { + const message = format( + template, + newAdmin ? : 'unknown', + denom ? formatDenom(denom) : 'unknown' + ); + return {message}; +}; + +export const MsgChangeAdminHandler = createSenderReceiverHandler({ + iconSender: TransferIcon, + successSender: tx => + createMessage( + 'You changed the administrator of the {1} token to {0}', + tx.metadata?.newAdmin, + tx.metadata?.denom + ), + failSender: tx => + createMessage( + 'You failed to change the administrator of the {1} token to {0}', + tx.metadata?.newAdmin, + tx.metadata?.denom + ), + successReceiver: tx => + createMessage( + 'The administrator of the {1} token was changed to {0}', + tx.metadata?.newAdmin, + tx.metadata?.denom + ), +}); + +registerHandler(MsgChangeAdmin.typeUrl, MsgChangeAdminHandler); diff --git a/components/bank/handlers/tokenfactory/msgCreateDenomHandler.tsx b/components/bank/handlers/tokenfactory/msgCreateDenomHandler.tsx new file mode 100644 index 00000000..deaa87cc --- /dev/null +++ b/components/bank/handlers/tokenfactory/msgCreateDenomHandler.tsx @@ -0,0 +1,27 @@ +import { FactoryIcon } from '@/components/icons/FactoryIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { formatDenom } from '@/utils'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgCreateDenom } from '@liftedinit/manifestjs/dist/codegen/osmosis/tokenfactory/v1beta1/tx'; +import { format } from 'react-string-format'; +import { TruncatedAddressWithCopy } from '@/components/react/addressCopy'; + +const createMessage = (template: string, sender: string, subdenom: string) => { + const message = format( + template, + formatDenom(`factory/${sender}/${subdenom}`), + sender ? : 'an unknown address' + ); + return {message}; +}; +export const MsgCreateDenomHandler = createSenderReceiverHandler({ + iconSender: FactoryIcon, + successSender: tx => + createMessage('You created the {0} denomination', tx.sender, tx.metadata?.subdenom), + failSender: tx => + createMessage('You failed to create the {0} denomination', tx.sender, tx.metadata?.subdenom), + successReceiver: tx => + createMessage('The {0} denomination was created by {1}', tx.sender, tx.metadata?.subdenom), +}); + +registerHandler(MsgCreateDenom.typeUrl, MsgCreateDenomHandler); diff --git a/components/bank/handlers/tokenfactory/msgMintHandler.tsx b/components/bank/handlers/tokenfactory/msgMintHandler.tsx new file mode 100644 index 00000000..11687657 --- /dev/null +++ b/components/bank/handlers/tokenfactory/msgMintHandler.tsx @@ -0,0 +1,40 @@ +import { FactoryIcon } from '@/components/icons/FactoryIcon'; +import { formatAmount, formatDenom, formatLargeNumber } from '@/utils'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgMint } from '@liftedinit/manifestjs/dist/codegen/osmosis/tokenfactory/v1beta1/tx'; +import { TruncatedAddressWithCopy } from '@/components/react/addressCopy'; +import { createTokenMessage } from '@/components'; + +export const MsgMintHandler = createSenderReceiverHandler({ + iconSender: FactoryIcon, + successSender: (tx, _, metadata) => + createTokenMessage( + 'You minted {0} to {1}', + tx.metadata?.amount?.amount, + tx.metadata?.amount?.denom, + tx.metadata?.mintToAddress, + 'green', + metadata + ), + failSender: (tx, _, metadata) => + createTokenMessage( + 'You failed to mint {0} to {1}', + tx.metadata?.amount?.amount, + tx.metadata?.amount?.denom, + tx.metadata?.mintToAddress, + 'red', + metadata + ), + successReceiver: (tx, _, metadata) => + createTokenMessage( + 'You were minted {0} from {1}', + tx.metadata?.amount?.amount, + tx.metadata?.amount?.denom, + tx.sender, + 'green', + metadata + ), +}); + +registerHandler(MsgMint.typeUrl, MsgMintHandler); diff --git a/components/bank/handlers/tokenfactory/msgSetDenomMetadataHandler.tsx b/components/bank/handlers/tokenfactory/msgSetDenomMetadataHandler.tsx new file mode 100644 index 00000000..332215c8 --- /dev/null +++ b/components/bank/handlers/tokenfactory/msgSetDenomMetadataHandler.tsx @@ -0,0 +1,21 @@ +import { FactoryIcon } from '@/components/icons/FactoryIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { formatDenom } from '@/utils'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgSetDenomMetadata } from '@liftedinit/manifestjs/dist/codegen/osmosis/tokenfactory/v1beta1/tx'; +import { format } from 'react-string-format'; + +const createMessage = (template: string, base: string) => { + const message = format(template, formatDenom(base)); + return {message}; +}; +export const MsgSetDenomMetadataHandler = createSenderReceiverHandler({ + iconSender: FactoryIcon, + successSender: tx => createMessage('You set the metadata of denomination {0}', tx.metadata?.base), + failSender: tx => + createMessage('You failed to set the metadata of denomination {0}', tx.metadata?.base), + successReceiver: tx => + createMessage('The {0} denomination had its metadata set', tx.metadata?.base), +}); + +registerHandler(MsgSetDenomMetadata.typeUrl, MsgSetDenomMetadataHandler); diff --git a/components/bank/handlers/upgrade/index.ts b/components/bank/handlers/upgrade/index.ts new file mode 100644 index 00000000..055dff99 --- /dev/null +++ b/components/bank/handlers/upgrade/index.ts @@ -0,0 +1,2 @@ +export * from './msgSoftwareUpgradeHandler'; +export * from './msgCancelUpgradeHandler'; diff --git a/components/bank/handlers/upgrade/msgCancelUpgradeHandler.tsx b/components/bank/handlers/upgrade/msgCancelUpgradeHandler.tsx new file mode 100644 index 00000000..9dd1d956 --- /dev/null +++ b/components/bank/handlers/upgrade/msgCancelUpgradeHandler.tsx @@ -0,0 +1,24 @@ +import { ArrowUpIcon } from '@/components/icons/ArrowUpIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgCancelUpgrade } from '@liftedinit/manifestjs/dist/codegen/cosmos/upgrade/v1beta1/tx'; +import { TruncatedAddressWithCopy } from '@/components/react/addressCopy'; +import { format } from 'react-string-format'; + +const createMessage = (template: string, sender: string) => { + const message = format( + template, + sender ? : 'an unknown address' + ); + return {message}; +}; + +export const MsgCancelUpgradeHandler = createSenderReceiverHandler({ + iconSender: ArrowUpIcon, + successSender: 'You successfully cancelled the chain upgrade', + failSender: 'You failed to cancel chain software upgrade', + successReceiver: tx => + createMessage('The chain software upgrade was cancelled by {0}', tx.sender), +}); + +registerHandler(MsgCancelUpgrade.typeUrl, MsgCancelUpgradeHandler); diff --git a/components/bank/handlers/upgrade/msgSoftwareUpgradeHandler.tsx b/components/bank/handlers/upgrade/msgSoftwareUpgradeHandler.tsx new file mode 100644 index 00000000..4bc2d6ac --- /dev/null +++ b/components/bank/handlers/upgrade/msgSoftwareUpgradeHandler.tsx @@ -0,0 +1,41 @@ +import { ArrowUpIcon } from '@/components/icons/ArrowUpIcon'; +import { createSenderReceiverHandler } from '../createSenderReceiverHandler'; +import { registerHandler } from '@/components/bank/handlers/handlerRegistry'; +import { MsgSoftwareUpgrade } from '@liftedinit/manifestjs/dist/codegen/cosmos/upgrade/v1beta1/tx'; +import { format } from 'react-string-format'; +import { TruncatedAddressWithCopy } from '@/components/react/addressCopy'; + +const createMessage = (template: string, planName: string, planHeight: string, sender?: string) => { + const message = format( + template, + planName, + planHeight, + sender ? : 'an unknown address' + ); + return {message}; +}; + +export const MsgSoftwareUpgradeHandler = createSenderReceiverHandler({ + iconSender: ArrowUpIcon, + successSender: tx => + createMessage( + 'You scheduled a chain upgrade to {0} at block {1}', + tx.metadata?.plan?.name, + tx.metadata?.plan?.height + ), + failSender: tx => + createMessage( + 'You failed to schedule a chain software upgrade to {0} at block {1}', + tx.metadata?.plan?.name, + tx.metadata.plan?.height + ), + successReceiver: tx => + createMessage( + 'A chain upgrade to {0} is scheduled at block {1} by {2}', + tx.metadata?.plan?.name, + tx.metadata?.plan?.height, + tx.sender + ), +}); + +registerHandler(MsgSoftwareUpgrade.typeUrl, MsgSoftwareUpgradeHandler); diff --git a/components/bank/index.ts b/components/bank/index.ts index 83d6eb9c..28a431e4 100644 --- a/components/bank/index.ts +++ b/components/bank/index.ts @@ -1,3 +1,4 @@ export * from './forms'; export * from './components'; export * from './modals'; +export * from './handlers'; diff --git a/components/bank/modals/txInfo.tsx b/components/bank/modals/txInfo.tsx index 4f277784..da75952f 100644 --- a/components/bank/modals/txInfo.tsx +++ b/components/bank/modals/txInfo.tsx @@ -1,17 +1,19 @@ -import React from 'react'; +import React, { useMemo } from 'react'; import { TruncatedAddressWithCopy } from '@/components/react/addressCopy'; -import { formatDenom, TransactionGroup } from '@/components'; +import { objectSyntax } from '@/components'; import { FaExternalLinkAlt } from 'react-icons/fa'; -import { shiftDigits } from '@/utils'; import env from '@/config/env'; +import { useTheme } from '@/contexts'; +import { TxMessage } from '@/components/bank/types'; +import { isJsonString } from '@/utils/json'; interface TxInfoModalProps { - tx: TransactionGroup; - + tx: TxMessage; modalId: string; } export default function TxInfoModal({ tx, modalId }: TxInfoModalProps) { + const { theme } = useTheme(); function formatDate(dateString: string): string { const date = new Date(dateString); return date.toLocaleString('en-US', { @@ -24,6 +26,14 @@ export default function TxInfoModal({ tx, modalId }: TxInfoModalProps) { }); } + function isBase64(str: string): boolean { + try { + return btoa(atob(str)) === str; + } catch (err) { + return false; + } + } + return (
- - +
-
-

- VALUE -

-
- {tx?.data?.amount.map((amt, index) => ( -

- {Number(shiftDigits(amt.amount, -6)).toLocaleString(undefined, { - maximumFractionDigits: 6, - })}{' '} - {formatDenom(amt.denom)} -

- ))} -
-
+ {/*{tx?.metadata && (*/} + {/*
*/} + {/*

Metadata

*/} + {/* {Object.entries(tx?.metadata).map(([key, value], index) => (*/} + {/* */} + {/* ))}*/} + {/*
*/} + {/*)}*/} {tx.memo && (
)} + {tx.error && ( +
+ +
+ )}
@@ -100,17 +102,48 @@ export default function TxInfoModal({ tx, modalId }: TxInfoModalProps) { ); } +function MetadataItem({ + label, + content, + theme, +}: Readonly<{ + label: string; + content: any; + theme: string; +}>) { + const isJson = useMemo(() => isJsonString(content), [content]); + + return ( +
+

+ {label.toUpperCase().replace(/_/g, ' ')} +

+ {isJson ? ( + objectSyntax(JSON.parse(content), theme) + ) : typeof content === 'object' ? ( +
+
{JSON.stringify(content, null, 2)}
+
+ ) : ( +
+

{content}

+
+ )} +
+ ); +} + function InfoItem({ label, value, explorerUrl, isAddress = false, -}: { +}: Readonly<{ label: string; value: string; explorerUrl: string; isAddress?: boolean; -}) { +}>) { return (

{label}

diff --git a/components/bank/types.ts b/components/bank/types.ts new file mode 100644 index 00000000..c76b05bb --- /dev/null +++ b/components/bank/types.ts @@ -0,0 +1,24 @@ +export interface TransactionAmount { + amount: string; + denom: string; +} + +interface TxFee { + amount: TransactionAmount[]; + gas: string; +} + +export interface TxMessage { + id: string; + message_index: number; + type: string; + sender: string; + mentions: string[]; + metadata: any; + fee: TxFee; + memo: string; + height: number; + timestamp: string; + error: string; + proposal_ids: string[]; +} diff --git a/components/groups/components/__tests__/groupInfo.test.tsx b/components/groups/components/__tests__/groupInfo.test.tsx index 270652a3..d9681776 100644 --- a/components/groups/components/__tests__/groupInfo.test.tsx +++ b/components/groups/components/__tests__/groupInfo.test.tsx @@ -92,12 +92,12 @@ describe('GroupInfo', () => { expect(screen.getByText('No threshold available')).toBeInTheDocument(); }); - test('triggers update modal on button click', () => { + test('triggers upgrade modal on button click', () => { renderWithProps(); - const updateButton = screen.getByLabelText('update-btn'); + const updateButton = screen.getByLabelText('upgrade-btn'); fireEvent.click(updateButton); const modal = document.getElementById(`update-group-modal`) as HTMLDialogElement; expect(modal).toBeInTheDocument(); - expect(screen.getByLabelText('update-group-btn')).toBeInTheDocument(); + expect(screen.getByLabelText('upgrade-group-btn')).toBeInTheDocument(); }); }); diff --git a/components/groups/components/__tests__/myGroups.test.tsx b/components/groups/components/__tests__/myGroups.test.tsx index c0f1d8b5..e59a87be 100644 --- a/components/groups/components/__tests__/myGroups.test.tsx +++ b/components/groups/components/__tests__/myGroups.test.tsx @@ -29,7 +29,7 @@ mock.module('@/hooks/useQueries', () => ({ isBalanceLoading: false, isBalanceError: false, }), - useGetFilteredTxAndSuccessfulProposals: jest.fn().mockReturnValue({ + useGetMessagesFromAddress: jest.fn().mockReturnValue({ sendTxs: [], totalPages: 1, isLoading: false, diff --git a/components/groups/components/groupControls.tsx b/components/groups/components/groupControls.tsx index ac2d40a0..1e67696e 100644 --- a/components/groups/components/groupControls.tsx +++ b/components/groups/components/groupControls.tsx @@ -4,7 +4,6 @@ import { useTallyCount, useVotesByProposal, useMultipleTallyCounts, - ExtendedQueryGroupsByMemberResponseSDKType, ExtendedGroupType, } from '@/hooks/useQueries'; import { ProposalSDKType } from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/types'; @@ -15,18 +14,16 @@ import { useRouter } from 'next/router'; import VoteDetailsModal from '@/components/groups/modals/voteDetailsModal'; import { useGroupsByMember } from '@/hooks/useQueries'; import { useChain } from '@cosmos-kit/react'; -import { - MemberSDKType, - GroupInfoSDKType, -} from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/types'; +import { MemberSDKType } from '@liftedinit/manifestjs/dist/codegen/cosmos/group/v1/types'; import { ArrowRightIcon } from '@/components/icons'; import ProfileAvatar from '@/utils/identicon'; -import { HistoryBox, TransactionGroup } from '@/components'; +import { HistoryBox } from '@/components'; import { TokenList } from '@/components'; import { CombinedBalanceInfo, ExtendedMetadataSDKType } from '@/utils'; import DenomList from '@/components/factory/components/DenomList'; import { useResponsivePageSize } from '@/hooks/useResponsivePageSize'; import env from '@/config/env'; +import { TxMessage } from '@/components/bank/types'; type GroupControlsProps = { policyAddress: string; @@ -36,7 +33,7 @@ type GroupControlsProps = { isLoading: boolean; currentPage: number; setCurrentPage: React.Dispatch>; - sendTxs: TransactionGroup[]; + sendTxs: TxMessage[]; totalPages: number; txLoading: boolean; isError: boolean; diff --git a/components/groups/components/myGroups.tsx b/components/groups/components/myGroups.tsx index 467acb84..4f9a7aa4 100644 --- a/components/groups/components/myGroups.tsx +++ b/components/groups/components/myGroups.tsx @@ -1,7 +1,7 @@ import { ExtendedGroupType, ExtendedQueryGroupsByMemberResponseSDKType, - useGetFilteredTxAndSuccessfulProposals, + useGetMessagesFromAddress, useTokenBalances, useTokenBalancesResolved, useTokenFactoryDenomsFromAdmin, @@ -191,7 +191,7 @@ export function YourGroups({ isLoading: txLoading, isError, refetch: refetchHistory, - } = useGetFilteredTxAndSuccessfulProposals( + } = useGetMessagesFromAddress( env.indexerUrl, selectedGroup?.policies[0]?.address ?? '', currentPageGroupInfo, diff --git a/components/groups/modals/groupInfo.tsx b/components/groups/modals/groupInfo.tsx index 5e8cdd52..5f3b09d6 100644 --- a/components/groups/modals/groupInfo.tsx +++ b/components/groups/modals/groupInfo.tsx @@ -228,7 +228,7 @@ export function GroupInfo({