mirror of
https://github.com/luxfi/explore.git
synced 2026-09-24 00:28:18 +00:00
88 lines
2.7 KiB
TypeScript
88 lines
2.7 KiB
TypeScript
import type { SearchResultItem } from 'types/api/search';
|
|
import type { MarketplaceAppOverview } from 'types/client/marketplace';
|
|
|
|
import config from 'configs/app';
|
|
|
|
export type ApiCategory = 'token' | 'nft' | 'address' | 'public_tag' | 'transaction' | 'block' | 'user_operation' | 'blob' | 'domain';
|
|
export type Category = ApiCategory | 'app';
|
|
|
|
export type ItemsCategoriesMap =
|
|
Record<ApiCategory, Array<SearchResultItem>> &
|
|
Record<'app', Array<MarketplaceAppOverview>>;
|
|
|
|
export type SearchResultAppItem = {
|
|
type: 'app';
|
|
app: MarketplaceAppOverview;
|
|
}
|
|
|
|
export const searchCategories: Array<{id: Category; title: string }> = [
|
|
{ id: 'app', title: 'DApps' },
|
|
{ id: 'token', title: `Tokens (${ config.chain.tokenStandard }-20)` },
|
|
{ id: 'nft', title: `NFTs (${ config.chain.tokenStandard }-721 & 1155)` },
|
|
{ id: 'address', title: 'Addresses' },
|
|
{ id: 'public_tag', title: 'Public tags' },
|
|
{ id: 'transaction', title: 'Transactions' },
|
|
{ id: 'block', title: 'Blocks' },
|
|
];
|
|
|
|
if (config.features.userOps.isEnabled) {
|
|
searchCategories.push({ id: 'user_operation', title: 'User operations' });
|
|
}
|
|
|
|
if (config.features.dataAvailability.isEnabled) {
|
|
searchCategories.push({ id: 'blob', title: 'Blobs' });
|
|
}
|
|
|
|
if (config.features.nameService.isEnabled) {
|
|
searchCategories.unshift({ id: 'domain', title: 'Names' });
|
|
}
|
|
|
|
export const searchItemTitles: Record<Category, { itemTitle: string; itemTitleShort: string }> = {
|
|
app: { itemTitle: 'DApp', itemTitleShort: 'App' },
|
|
domain: { itemTitle: 'Name', itemTitleShort: 'Name' },
|
|
token: { itemTitle: 'Token', itemTitleShort: 'Token' },
|
|
nft: { itemTitle: 'NFT', itemTitleShort: 'NFT' },
|
|
address: { itemTitle: 'Address', itemTitleShort: 'Address' },
|
|
public_tag: { itemTitle: 'Public tag', itemTitleShort: 'Tag' },
|
|
transaction: { itemTitle: 'Transaction', itemTitleShort: 'Txn' },
|
|
block: { itemTitle: 'Block', itemTitleShort: 'Block' },
|
|
user_operation: { itemTitle: 'User operation', itemTitleShort: 'User op' },
|
|
blob: { itemTitle: 'Blob', itemTitleShort: 'Blob' },
|
|
};
|
|
|
|
export function getItemCategory(item: SearchResultItem | SearchResultAppItem): Category | undefined {
|
|
switch (item.type) {
|
|
case 'address':
|
|
case 'contract': {
|
|
return 'address';
|
|
}
|
|
case 'token': {
|
|
if (item.token_type === 'ERC-20') {
|
|
return 'token';
|
|
}
|
|
return 'nft';
|
|
}
|
|
case 'block': {
|
|
return 'block';
|
|
}
|
|
case 'label': {
|
|
return 'public_tag';
|
|
}
|
|
case 'transaction': {
|
|
return 'transaction';
|
|
}
|
|
case 'app': {
|
|
return 'app';
|
|
}
|
|
case 'user_operation': {
|
|
return 'user_operation';
|
|
}
|
|
case 'blob': {
|
|
return 'blob';
|
|
}
|
|
case 'ens_domain': {
|
|
return 'domain';
|
|
}
|
|
}
|
|
}
|