Files
explore/ui/nameDomain/NameDomainHistory.tsx
tom goriunovandGitHub 24eb4fc014 API resource refactoring (#2699)
* add prefix to API resources

* fix pw tests

* refactor config

* remove unnecessary prefixes in resource names

* fixes

* update screenshots
2025-05-01 15:22:38 +02:00

80 lines
2.1 KiB
TypeScript

import { Box } from '@chakra-ui/react';
import { useRouter } from 'next/router';
import React from 'react';
import type * as bens from '@blockscout/bens-types';
import config from 'configs/app';
import useApiQuery from 'lib/api/useApiQuery';
import getQueryParamString from 'lib/router/getQueryParamString';
import { ENS_DOMAIN_EVENT } from 'stubs/ENS';
import DataListDisplay from 'ui/shared/DataListDisplay';
import NameDomainHistoryListItem from './history/NameDomainHistoryListItem';
import NameDomainHistoryTable from './history/NameDomainHistoryTable';
import { getNextSortValue, type Sort, type SortField } from './history/utils';
interface Props {
domain: bens.DetailedDomain | undefined;
}
const NameDomainHistory = ({ domain }: Props) => {
const router = useRouter();
const domainName = getQueryParamString(router.query.name);
const [ sort, setSort ] = React.useState<Sort>('default');
const { isPlaceholderData, isError, data } = useApiQuery('bens:domain_events', {
pathParams: { name: domainName, chainId: config.chain.id },
queryOptions: {
placeholderData: { items: Array(4).fill(ENS_DOMAIN_EVENT) },
},
});
const handleSortToggle = React.useCallback((field: SortField) => {
if (isPlaceholderData) {
return;
}
if (field) {
setSort(getNextSortValue(field));
}
}, [ isPlaceholderData ]);
const content = (
<>
<Box hideFrom="lg">
{ data?.items.map((item, index) => (
<NameDomainHistoryListItem
key={ index }
event={ item }
domain={ domain }
isLoading={ isPlaceholderData }
/>
)) }
</Box>
<Box hideBelow="lg">
<NameDomainHistoryTable
history={ data }
domain={ domain }
isLoading={ isPlaceholderData }
sort={ sort }
onSortToggle={ handleSortToggle }
/>
</Box>
</>
);
return (
<DataListDisplay
isError={ isError }
itemsNum={ data?.items.length }
emptyText="There are no events for this domain."
>
{ content }
</DataListDisplay>
);
};
export default React.memo(NameDomainHistory);