mirror of
https://github.com/hzrd149/nostrudel.git
synced 2025-04-23 23:10:20 +02:00
small hashtag fixes
This commit is contained in:
parent
fb1f242b7c
commit
b8a3fd1513
5
.changeset/soft-flowers-teach.md
Normal file
5
.changeset/soft-flowers-teach.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"nostrudel": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
small fix for hashtags
|
@ -3,4 +3,4 @@ export const matchImageUrls =
|
|||||||
/https?:\/\/([\dA-z\.-]+\.[A-z\.]{2,12})((?:\/[\+~%\/\.\w\-_]*)?\.(?:svg|gif|png|jpg|jpeg|webp|avif))(\??(?:[\?#\-\+=&;%@\.\w_]*)#?(?:[\-\.\!\/\\\w]*))?/i;
|
/https?:\/\/([\dA-z\.-]+\.[A-z\.]{2,12})((?:\/[\+~%\/\.\w\-_]*)?\.(?:svg|gif|png|jpg|jpeg|webp|avif))(\??(?:[\?#\-\+=&;%@\.\w_]*)#?(?:[\-\.\!\/\\\w]*))?/i;
|
||||||
|
|
||||||
export const matchNostrLink = /(nostr:|@)?((npub|note|nprofile|nevent)1[qpzry9x8gf2tvdw0s3jn54khce6mua7l]{58,})/i;
|
export const matchNostrLink = /(nostr:|@)?((npub|note|nprofile|nevent)1[qpzry9x8gf2tvdw0s3jn54khce6mua7l]{58,})/i;
|
||||||
export const matchHashtag = /(^|\s)#([^\s#]+)/i;
|
export const matchHashtag = /(^|[^\p{L}])#(\p{L}+)/iu;
|
||||||
|
@ -23,6 +23,7 @@ import { truncatedId } from "../../helpers/nostr-event";
|
|||||||
import QrScannerModal from "../../components/qr-scanner-modal";
|
import QrScannerModal from "../../components/qr-scanner-modal";
|
||||||
import { safeDecode } from "../../helpers/nip19";
|
import { safeDecode } from "../../helpers/nip19";
|
||||||
import { useInvoiceModalContext } from "../../providers/invoice-modal";
|
import { useInvoiceModalContext } from "../../providers/invoice-modal";
|
||||||
|
import { matchHashtag } from "../../helpers/regexp";
|
||||||
|
|
||||||
type relay = string;
|
type relay = string;
|
||||||
type NostrBandSearchResults = {
|
type NostrBandSearchResults = {
|
||||||
@ -91,13 +92,20 @@ export default function SearchView() {
|
|||||||
}, [searchParams]);
|
}, [searchParams]);
|
||||||
|
|
||||||
const handleSearchText = (text: string) => {
|
const handleSearchText = (text: string) => {
|
||||||
if (text.startsWith("nostr:") || text.startsWith("web+nostr:") || safeDecode(search)) {
|
const cleanText = text.trim();
|
||||||
|
|
||||||
|
if (cleanText.startsWith("nostr:") || cleanText.startsWith("web+nostr:") || safeDecode(search)) {
|
||||||
navigate({ pathname: "/l/" + encodeURIComponent(text) }, { replace: true });
|
navigate({ pathname: "/l/" + encodeURIComponent(text) }, { replace: true });
|
||||||
} else if (text.trim().match(/^#(\w+)/i)) {
|
return;
|
||||||
navigate({ pathname: "/t/" + text.toLowerCase().trim().replace(/^#/, "") });
|
|
||||||
} else {
|
|
||||||
setSearchParams({ q: text }, { replace: true });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const hashTagMatch = cleanText.match(matchHashtag);
|
||||||
|
if (hashTagMatch) {
|
||||||
|
navigate({ pathname: "/t/" + hashTagMatch[2].toLocaleLowerCase() });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setSearchParams({ q: cleanText }, { replace: true });
|
||||||
};
|
};
|
||||||
|
|
||||||
const readClipboard = useCallback(async () => {
|
const readClipboard = useCallback(async () => {
|
||||||
|
@ -18,14 +18,14 @@ function FollowerItem({ index, style, data: followers }: ListChildComponentProps
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const UserFollowersTab = () => {
|
export default function UserFollowersTab() {
|
||||||
const { pubkey } = useOutletContext() as { pubkey: string };
|
const { pubkey } = useOutletContext() as { pubkey: string };
|
||||||
|
|
||||||
const relays = useReadRelayUrls(useAdditionalRelayContext());
|
const relays = useReadRelayUrls(useAdditionalRelayContext());
|
||||||
const followers = useUserFollowers(pubkey, relays, true);
|
const followers = useUserFollowers(pubkey, relays, true);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Flex gap="2" direction="column" overflowY="auto" p="2" h="full">
|
<Flex gap="2" direction="column" p="2" h="90vh">
|
||||||
{followers ? (
|
{followers ? (
|
||||||
<Box flex={1}>
|
<Box flex={1}>
|
||||||
<AutoSizer disableWidth>
|
<AutoSizer disableWidth>
|
||||||
@ -49,6 +49,4 @@ const UserFollowersTab = () => {
|
|||||||
)}
|
)}
|
||||||
</Flex>
|
</Flex>
|
||||||
);
|
);
|
||||||
};
|
}
|
||||||
|
|
||||||
export default UserFollowersTab;
|
|
||||||
|
@ -24,7 +24,7 @@ export default function UserFollowingTab() {
|
|||||||
const contacts = useUserContacts(pubkey, contextRelays, true);
|
const contacts = useUserContacts(pubkey, contextRelays, true);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Flex gap="2" direction="column" overflowY="auto" p="2" h="full">
|
<Flex gap="2" direction="column" p="2" h="90vh">
|
||||||
{contacts ? (
|
{contacts ? (
|
||||||
<Box flex={1}>
|
<Box flex={1}>
|
||||||
<AutoSizer disableWidth>
|
<AutoSizer disableWidth>
|
||||||
|
@ -109,7 +109,7 @@ const UserView = () => {
|
|||||||
flexGrow="1"
|
flexGrow="1"
|
||||||
isLazy
|
isLazy
|
||||||
index={activeTab}
|
index={activeTab}
|
||||||
onChange={(v) => navigate(tabs[v].path)}
|
onChange={(v) => navigate(tabs[v].path, { replace: true })}
|
||||||
colorScheme="brand"
|
colorScheme="brand"
|
||||||
>
|
>
|
||||||
<TabList overflowX="auto" overflowY="hidden" flexShrink={0}>
|
<TabList overflowX="auto" overflowY="hidden" flexShrink={0}>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user