From 39e71e9d4068accb7d17cff9efbdc36a5e6f7ec9 Mon Sep 17 00:00:00 2001 From: snoopy1412 Date: Fri, 29 Nov 2024 13:05:14 +0800 Subject: [PATCH] add indexing error modal (#32) * add indexing error modal * fix ts error --- src/components/collator/_hooks/collator.ts | 2 +- src/components/waiting-indexing/context.tsx | 12 +++++- .../waiting-indexing/error-modal.tsx | 43 +++++++++++++++++++ src/hooks/useWaitingIndexing.ts | 12 ++++-- 4 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 src/components/waiting-indexing/error-modal.tsx diff --git a/src/components/collator/_hooks/collator.ts b/src/components/collator/_hooks/collator.ts index 0dd4ea4..bdc49c8 100644 --- a/src/components/collator/_hooks/collator.ts +++ b/src/components/collator/_hooks/collator.ts @@ -75,7 +75,7 @@ export const useCreateCollator = ({ abi: hubAbi, address: hubAddress, functionName: 'assetsToVotes', - args: [stakedOf ?? 0n, commission], + args: [commission, stakedOf ?? 0n], query: { enabled: isEnabled && !!stakedOf && enabled } diff --git a/src/components/waiting-indexing/context.tsx b/src/components/waiting-indexing/context.tsx index 3e01f37..689a1f7 100644 --- a/src/components/waiting-indexing/context.tsx +++ b/src/components/waiting-indexing/context.tsx @@ -1,10 +1,14 @@ import { createContext, useState, ReactNode } from 'react'; import WaitingIndexing from '@/components/waiting-indexing'; +import IndexingErrorModal from '@/components/waiting-indexing/error-modal'; // Assuming this component exists interface WaitingIndexingContextProps { isOpen: boolean; open: () => void; close: () => void; + openError: () => void; + closeError: () => void; + isErrorOpen: boolean; } export const WaitingIndexingContext = createContext( @@ -13,14 +17,20 @@ export const WaitingIndexingContext = createContext setIsOpen(true); const close = () => setIsOpen(false); + const openError = () => setIsErrorOpen(true); + const closeError = () => setIsErrorOpen(false); return ( - + {children} + ); } diff --git a/src/components/waiting-indexing/error-modal.tsx b/src/components/waiting-indexing/error-modal.tsx new file mode 100644 index 0000000..42e65e6 --- /dev/null +++ b/src/components/waiting-indexing/error-modal.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import { Modal, ModalBody, ModalContent, ModalHeader } from '@nextui-org/modal'; +import { CircleAlert } from 'lucide-react'; + +interface IndexingErrorModalProps { + isOpen: boolean; + onClose: () => void; +} + +const IndexingErrorModal: React.FC = ({ isOpen, onClose }) => { + return ( + + + + + Indexing Service Error + + +
+ Indexing service error, please report it at{' '} + + https://github.com/darwinia-network/collator-staking-ui-v2/issues/new + +
+
+
+
+ ); +}; + +export default IndexingErrorModal; diff --git a/src/hooks/useWaitingIndexing.ts b/src/hooks/useWaitingIndexing.ts index 1fa474f..eccca19 100644 --- a/src/hooks/useWaitingIndexing.ts +++ b/src/hooks/useWaitingIndexing.ts @@ -8,7 +8,7 @@ import useWalletStatus from './useWalletStatus'; function useCheckWaitingIndexing() { const { currentChainId } = useWalletStatus(); - const { open } = useWaitingIndexing(); + const { open, openError } = useWaitingIndexing(); const [isLoading, setIsLoading] = useState(false); const checkWaitingIndexing = useCallback(async () => { @@ -25,7 +25,11 @@ function useCheckWaitingIndexing() { }), fetchDeploymentMeta(currentChainId) ]); - + if (!deploymentMeta?._meta?.block?.timestamp) { + openError(); + setIsLoading(false); + return { isDeployed: false, error: null }; + } if (deploymentMeta?._meta?.block?.timestamp) { const contractTimestamp = updateTimeStamp ? BigInt(updateTimeStamp.toString()) : 0n; const indexedTimestamp = BigInt(deploymentMeta._meta.block.timestamp); @@ -36,7 +40,7 @@ function useCheckWaitingIndexing() { return { isDeployed, error: null }; } - return { isDeployed: false, error: null }; + return { isDeployed: false, error: new Error('Indexing service error') }; } catch (error) { return { isDeployed: false, @@ -45,7 +49,7 @@ function useCheckWaitingIndexing() { } finally { setIsLoading(false); } - }, [currentChainId, open]); + }, [currentChainId, open, openError]); return { checkWaitingIndexing, isLoading }; }