Browse Source

get rid of clear cache button, get rid of view full event button, make hex id label into a button, do a better job identifying hex ids

master
silberengel 7 months ago
parent
commit
9fae55f68d
  1. 20
      src/lib/components/EventDetails.svelte
  2. 15
      src/lib/components/EventSearch.svelte
  3. 23
      src/lib/components/embedded_events/EmbeddedEvent.svelte
  4. 6
      src/lib/components/embedded_events/EmbeddedSnippets.svelte
  5. 7
      src/routes/events/+page.svelte

20
src/lib/components/EventDetails.svelte

@ -244,8 +244,8 @@
const naddr = naddrEncode(event, $activeInboxRelays); const naddr = naddrEncode(event, $activeInboxRelays);
ids.push({ label: "naddr", value: naddr, link: `/events?id=${naddr}` }); ids.push({ label: "naddr", value: naddr, link: `/events?id=${naddr}` });
} catch {} } catch {}
// hex id // hex id - make it a clickable link to search for the event ID
ids.push({ label: "id", value: event.id }); ids.push({ label: "id", value: event.id, link: `/events?id=${event.id}` });
} }
return ids; return ids;
} }
@ -357,9 +357,19 @@
<div class="flex items-center gap-2 min-w-0"> <div class="flex items-center gap-2 min-w-0">
<span class="text-gray-600 dark:text-gray-400 flex-shrink-0">{identifier.label}:</span> <span class="text-gray-600 dark:text-gray-400 flex-shrink-0">{identifier.label}:</span>
<div class="flex-1 min-w-0 flex items-center gap-2"> <div class="flex-1 min-w-0 flex items-center gap-2">
<span class="font-mono text-sm text-gray-900 dark:text-gray-100 break-all" title={identifier.value}> {#if identifier.link}
{identifier.value.slice(0, 20)}...{identifier.value.slice(-8)} <a
</span> href={identifier.link}
class="font-mono text-sm text-primary-700 dark:text-primary-300 hover:text-primary-900 dark:hover:text-primary-100 break-all cursor-pointer"
title={identifier.value}
>
{identifier.value.slice(0, 20)}...{identifier.value.slice(-8)}
</a>
{:else}
<span class="font-mono text-sm text-gray-900 dark:text-gray-100 break-all" title={identifier.value}>
{identifier.value.slice(0, 20)}...{identifier.value.slice(-8)}
</span>
{/if}
<CopyToClipboard <CopyToClipboard
displayText="" displayText=""
copyText={identifier.value} copyText={identifier.value}

15
src/lib/components/EventSearch.svelte

@ -12,6 +12,7 @@
import { neventEncode, naddrEncode, nprofileEncode } from "$lib/utils"; import { neventEncode, naddrEncode, nprofileEncode } from "$lib/utils";
import { activeInboxRelays, activeOutboxRelays, getNdkContext } from "$lib/ndk"; import { activeInboxRelays, activeOutboxRelays, getNdkContext } from "$lib/ndk";
import { getMatchingTags, toNpub } from "$lib/utils/nostrUtils"; import { getMatchingTags, toNpub } from "$lib/utils/nostrUtils";
import { isEventId } from "$lib/utils/nostr_identifiers";
import type NDK from '@nostr-dev-kit/ndk'; import type NDK from '@nostr-dev-kit/ndk';
// Props definition // Props definition
@ -171,9 +172,15 @@
return { type: "nip05", term: query }; return { type: "nip05", term: query };
} }
// AI-NOTE: 2025-01-24 - Detect hex IDs (64-character hex strings with no spaces)
// These are likely event IDs and should be searched as events
const trimmedQuery = query.trim();
if (trimmedQuery && isEventId(trimmedQuery)) {
return { type: "event", term: trimmedQuery };
}
// AI-NOTE: 2025-01-24 - Treat plain text searches as profile searches by default // AI-NOTE: 2025-01-24 - Treat plain text searches as profile searches by default
// This allows searching for names like "thebeave" or "TheBeave" without needing n: prefix // This allows searching for names like "thebeave" or "TheBeave" without needing n: prefix
const trimmedQuery = query.trim();
if (trimmedQuery && !trimmedQuery.startsWith("nevent") && !trimmedQuery.startsWith("npub") && !trimmedQuery.startsWith("naddr")) { if (trimmedQuery && !trimmedQuery.startsWith("nevent") && !trimmedQuery.startsWith("npub") && !trimmedQuery.startsWith("naddr")) {
return { type: "n", term: trimmedQuery }; return { type: "n", term: trimmedQuery };
} }
@ -200,6 +207,12 @@
return; return;
} }
if (type === "event") {
console.log("EventSearch: Processing event ID search:", term);
await handleEventSearch(term);
return;
}
if (type === "t" || type === "n") { if (type === "t" || type === "n") {
await handleSearchBySubscription(type as "t" | "n", term); await handleSearchBySubscription(type as "t" | "n", term);
return; return;

23
src/lib/components/embedded_events/EmbeddedEvent.svelte

@ -278,12 +278,6 @@
</div> </div>
{/if} {/if}
</div> </div>
<button
class="text-xs text-primary-600 dark:text-primary-500 hover:underline flex-shrink-0"
onclick={navigateToEvent}
>
View full event →
</button>
</div> </div>
<!-- Event title --> <!-- Event title -->
@ -730,13 +724,20 @@
<div class="mt-3 pt-3 border-t border-gray-200 dark:border-gray-700 min-w-0 overflow-hidden"> <div class="mt-3 pt-3 border-t border-gray-200 dark:border-gray-700 min-w-0 overflow-hidden">
<div class="flex flex-wrap gap-2 text-xs min-w-0"> <div class="flex flex-wrap gap-2 text-xs min-w-0">
<span class="text-gray-500 dark:text-gray-400 flex-shrink-0">ID:</span> <span class="text-gray-500 dark:text-gray-400 flex-shrink-0">ID:</span>
<span class="font-mono text-gray-700 dark:text-gray-300 break-all"> <a
{event.id.slice(0, 8)}...{event.id.slice(-4)} href="/events?id={event!.id}"
</span> class="font-mono text-primary-600 dark:text-primary-400 hover:text-primary-800 dark:hover:text-primary-200 break-all cursor-pointer"
{#if isAddressableEvent(event)} onclick={(e) => {
e.preventDefault();
goto(`/events?id=${event!.id}`);
}}
>
{event!.id.slice(0, 8)}...{event!.id.slice(-4)}
</a>
{#if isAddressableEvent(event!)}
<span class="text-gray-500 dark:text-gray-400 flex-shrink-0">Address:</span> <span class="text-gray-500 dark:text-gray-400 flex-shrink-0">Address:</span>
<span class="font-mono text-gray-700 dark:text-gray-300 break-all"> <span class="font-mono text-gray-700 dark:text-gray-300 break-all">
{getNaddrUrl(event).slice(0, 12)}...{getNaddrUrl(event).slice(-8)} {getNaddrUrl(event!).slice(0, 12)}...{getNaddrUrl(event!).slice(-8)}
</span> </span>
{/if} {/if}
</div> </div>

6
src/lib/components/embedded_events/EmbeddedSnippets.svelte

@ -248,12 +248,6 @@
{formattedDate} {formattedDate}
</span> </span>
</div> </div>
<button
class="text-xs text-primary-600 dark:text-primary-500 hover:underline flex-shrink-0"
onclick={() => window.location.href=`/events?id=${originalEvent.id || 'unknown'}`}
>
View full event →
</button>
</div> </div>
<!-- Reposted content --> <!-- Reposted content -->

7
src/routes/events/+page.svelte

@ -509,13 +509,6 @@
<div class="flex justify-between items-center"> <div class="flex justify-between items-center">
<Heading tag="h1" class="h-leather mb-2">Events</Heading> <Heading tag="h1" class="h-leather mb-2">Events</Heading>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<button
class="text-sm text-red-600 dark:text-red-400 hover:text-red-800 dark:hover:text-red-200 border border-red-300 dark:border-red-600 rounded px-2 py-1"
onclick={handleClearCache}
title="Clear all caches to refresh stale data"
>
Clear Cache
</button>
{#if showSidePanel && (searchResults.length > 0 || secondOrderResults.length > 0 || tTagResults.length > 0)} {#if showSidePanel && (searchResults.length > 0 || secondOrderResults.length > 0 || tTagResults.length > 0)}
<button <button
class="lg:hidden text-sm text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-200 border border-gray-300 dark:border-gray-600 rounded px-2 py-1" class="lg:hidden text-sm text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-200 border border-gray-300 dark:border-gray-600 rounded px-2 py-1"

Loading…
Cancel
Save