Skip to content

Commit

Permalink
feat: use chain name instead of domainId for filters (#177)
Browse files Browse the repository at this point in the history
Now uses chain name instead of `domainId` as URL filter

- Update `ChainSelector` onChange function to update value with chain
name instead of `domainId`
- Update logic for `useMessageSearchQuery` to get `domainId` from chain
name

fixes #170
  • Loading branch information
Xaroz authored Feb 13, 2025
1 parent 9d924d8 commit 16cf874
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 26 deletions.
9 changes: 4 additions & 5 deletions src/components/search/SearchFilterBar.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import clsx from 'clsx';
import { useState } from 'react';

import { ChainMetadata, getDomainId } from '@hyperlane-xyz/sdk';
import { ChainMetadata } from '@hyperlane-xyz/sdk';
import { trimToLength } from '@hyperlane-xyz/utils';
import {
ChevronIcon,
Expand Down Expand Up @@ -71,13 +71,12 @@ function ChainSelector({

const multiProvider = useMultiProvider();

const chainName = value ? multiProvider.tryGetChainName(value) : undefined;
const chainDisplayName = chainName
? trimToLength(getChainDisplayName(multiProvider, chainName, true), 12)
const chainDisplayName = value
? trimToLength(getChainDisplayName(multiProvider, value, true), 12)
: undefined;

const onClickChain = (c: ChainMetadata) => {
onChangeValue(getDomainId(c).toString());
onChangeValue(c.name);
close();
};

Expand Down
12 changes: 6 additions & 6 deletions src/features/messages/queries/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,15 +64,15 @@ export function buildMessageQuery(

export function buildMessageSearchQuery(
searchInput: string,
originFilter: string | null,
destFilter: string | null,
originDomainIdFilter: number | null,
destDomainIdFilter: number | null,
startTimeFilter: number | null,
endTimeFilter: number | null,
limit: number,
useStub = false,
) {
const originChains = originFilter ? originFilter.split(',') : undefined;
const destinationChains = destFilter ? destFilter.split(',') : undefined;
const originChains = originDomainIdFilter ? [originDomainIdFilter] : undefined;
const destinationChains = destDomainIdFilter ? [destDomainIdFilter] : undefined;
const startTime = startTimeFilter ? adjustToUtcTime(startTimeFilter) : undefined;
const endTime = endTimeFilter ? adjustToUtcTime(endTimeFilter) : undefined;
const variables = {
Expand All @@ -91,8 +91,8 @@ export function buildMessageSearchQuery(
`q${i}: message_view(
where: {
_and: [
${originFilter ? '{origin_domain_id: {_in: $originChains}},' : ''}
${destFilter ? '{destination_domain_id: {_in: $destinationChains}},' : ''}
${originDomainIdFilter ? '{origin_domain_id: {_in: $originChains}},' : ''}
${destDomainIdFilter ? '{destination_domain_id: {_in: $destinationChains}},' : ''}
${startTimeFilter ? '{send_occurred_at: {_gte: $startTime}},' : ''}
${endTimeFilter ? '{send_occurred_at: {_lte: $endTime}},' : ''}
${whereClause}
Expand Down
31 changes: 16 additions & 15 deletions src/features/messages/queries/useMessageQuery.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import { useMultiProvider } from '../../../store';
import { MessageStatus } from '../../../types';
import { useScrapedDomains } from '../../chains/queries/useScrapedChains';

import { MultiProvider } from '@hyperlane-xyz/sdk';
import { useInterval } from '@hyperlane-xyz/widgets';
import { MessageIdentifierType, buildMessageQuery, buildMessageSearchQuery } from './build';
import { searchValueToPostgresBytea } from './encoding';
Expand All @@ -22,15 +21,10 @@ export function isValidSearchQuery(input: string) {
return !!searchValueToPostgresBytea(input);
}

export function isValidDomainId(domainId: string | null, multiProvider: MultiProvider) {
if (!domainId) return false;
return multiProvider.hasChain(domainId);
}

export function useMessageSearchQuery(
sanitizedInput: string,
originChainFilter: string | null,
destinationChainFilter: string | null,
originChainNameFilter: string | null,
destinationChainNameFilter: string | null,
startTimeFilter: number | null,
endTimeFilter: number | null,
) {
Expand All @@ -40,16 +34,23 @@ export function useMessageSearchQuery(
const hasInput = !!sanitizedInput;
const isValidInput = !hasInput || isValidSearchQuery(sanitizedInput);

// Get chains domainId
const originDomainId = originChainNameFilter
? multiProvider.tryGetDomainId(originChainNameFilter)
: null;
const destDomainId = destinationChainNameFilter
? multiProvider.tryGetDomainId(destinationChainNameFilter)
: null;

// validating filters
const isValidOrigin = !originChainFilter || isValidDomainId(originChainFilter, multiProvider);
const isValidDestination =
!destinationChainFilter || isValidDomainId(destinationChainFilter, multiProvider);
const isValidOrigin = !originChainNameFilter || originDomainId !== null;
const isValidDestination = !destinationChainNameFilter || destDomainId !== null;

// Assemble GraphQL query
const { query, variables } = buildMessageSearchQuery(
sanitizedInput,
isValidOrigin ? originChainFilter : null,
isValidDestination ? destinationChainFilter : null,
isValidOrigin ? originDomainId : null,
isValidDestination ? destDomainId : null,
startTimeFilter,
endTimeFilter,
hasInput ? SEARCH_QUERY_LIMIT : LATEST_QUERY_LIMIT,
Expand All @@ -73,8 +74,8 @@ export function useMessageSearchQuery(
// Filter recent messages during DB backfilling period
// TODO remove this once backfilling is complete
const hasFilter = !!(
originChainFilter ||
destinationChainFilter ||
originChainNameFilter ||
destinationChainNameFilter ||
startTimeFilter ||
endTimeFilter
);
Expand Down

0 comments on commit 16cf874

Please sign in to comment.