diff --git a/src/components/search/SearchError.tsx b/src/components/search/SearchStates.tsx similarity index 74% rename from src/components/search/SearchError.tsx rename to src/components/search/SearchStates.tsx index 3e02b7c..efee1e6 100644 --- a/src/components/search/SearchError.tsx +++ b/src/components/search/SearchStates.tsx @@ -5,6 +5,27 @@ import ErrorIcon from '../../images/icons/error-circle.svg'; import SearchOffIcon from '../../images/icons/search-off.svg'; import ShrugIcon from '../../images/icons/shrug.svg'; import { Fade } from '../animation/Fade'; +import { Spinner } from '../animation/Spinner'; + +export function SearchFetching({ show, isPiFetching }: { show: boolean; isPiFetching?: boolean }) { + return ( + // Absolute position for overlaying cross-fade +
+ +
+
+
+ +
+
+ {isPiFetching ? 'Searching custom chains for messages' : 'Searching for messages'} +
+
+
+
+
+ ); +} export function SearchError({ show, diff --git a/src/features/debugger/TxDebugger.tsx b/src/features/debugger/TxDebugger.tsx index da93ebe..5fb0b43 100644 --- a/src/features/debugger/TxDebugger.tsx +++ b/src/features/debugger/TxDebugger.tsx @@ -10,7 +10,7 @@ import { SearchEmptyError, SearchInvalidError, SearchUnknownError, -} from '../../components/search/SearchError'; +} from '../../components/search/SearchStates'; import ShrugIcon from '../../images/icons/shrug.svg'; import { useStore } from '../../store'; import useDebounce from '../../utils/debounce'; diff --git a/src/features/messages/MessageSearch.tsx b/src/features/messages/MessageSearch.tsx index 9409777..d23e8de 100644 --- a/src/features/messages/MessageSearch.tsx +++ b/src/features/messages/MessageSearch.tsx @@ -2,12 +2,13 @@ import { useState } from 'react'; import { Fade } from '../../components/animation/Fade'; import { SearchBar } from '../../components/search/SearchBar'; +import { SearchFilterBar } from '../../components/search/SearchFilterBar'; import { SearchEmptyError, + SearchFetching, SearchInvalidError, SearchUnknownError, -} from '../../components/search/SearchError'; -import { SearchFilterBar } from '../../components/search/SearchFilterBar'; +} from '../../components/search/SearchStates'; import useDebounce from '../../utils/debounce'; import { useQueryParam, useSyncQueryParam } from '../../utils/queryParams'; import { sanitizeString } from '../../utils/string'; @@ -54,6 +55,9 @@ export function MessageSearch() { isMessagesFound || isFetching, ); + // Coalesce GraphQL + PI results + const isAnyFetching = isFetching || isPiFetching; + const isAnyError = isError || isPiError; const isAnyMessageFound = isMessagesFound || piMessageList.length > 0; const messageListResult = isMessagesFound ? messageList : piMessageList; console.log(isPiError, isPiFetching, piMessageList); @@ -66,7 +70,7 @@ export function MessageSearch() {
@@ -85,15 +89,19 @@ export function MessageSearch() { onChangeEndTimestamp={setEndTimeFilter} />
- - + + + - +