You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
2.0 KiB
62 lines
2.0 KiB
import NoteList from '@/components/NoteList' |
|
import { SEARCHABLE_RELAY_URLS } from '@/constants' |
|
import { useSearchParams } from '@/hooks' |
|
import SecondaryPageLayout from '@/layouts/SecondaryPageLayout' |
|
import { isWebsocketUrl, simplifyUrl } from '@/lib/url' |
|
import { useRelaySettings } from '@/providers/RelaySettingsProvider' |
|
import { Filter } from 'nostr-tools' |
|
import { useMemo } from 'react' |
|
import { useTranslation } from 'react-i18next' |
|
|
|
export default function NoteListPage({ index }: { index?: number }) { |
|
const { t } = useTranslation() |
|
const { relayUrls, searchableRelayUrls } = useRelaySettings() |
|
const { searchParams } = useSearchParams() |
|
const relayUrlsString = JSON.stringify(relayUrls) |
|
const { |
|
title = '', |
|
filter, |
|
urls |
|
} = useMemo<{ |
|
title?: string |
|
filter?: Filter |
|
urls: string[] |
|
}>(() => { |
|
const hashtag = searchParams.get('t') |
|
if (hashtag) { |
|
return { title: `# ${hashtag}`, filter: { '#t': [hashtag] }, urls: relayUrls } |
|
} |
|
const search = searchParams.get('s') |
|
if (search) { |
|
return { |
|
title: `${t('Search')}: ${search}`, |
|
filter: { search }, |
|
urls: |
|
searchableRelayUrls.length < 4 |
|
? searchableRelayUrls.concat(SEARCHABLE_RELAY_URLS).slice(0, 4) |
|
: searchableRelayUrls |
|
} |
|
} |
|
const relayUrl = searchParams.get('relay') |
|
if (relayUrl && isWebsocketUrl(relayUrl)) { |
|
return { title: simplifyUrl(relayUrl), urls: [relayUrl] } |
|
} |
|
return { urls: relayUrls } |
|
}, [searchParams, relayUrlsString]) |
|
|
|
if (filter?.search && searchableRelayUrls.length === 0) { |
|
return ( |
|
<SecondaryPageLayout index={index} titlebarContent={title}> |
|
<div className="text-center text-sm text-muted-foreground"> |
|
{t('The relays you are connected to do not support search')} |
|
</div> |
|
</SecondaryPageLayout> |
|
) |
|
} |
|
|
|
return ( |
|
<SecondaryPageLayout index={index} titlebarContent={title} displayScrollToTopButton> |
|
<NoteList key={title} filter={filter} relayUrls={urls} /> |
|
</SecondaryPageLayout> |
|
) |
|
}
|
|
|