|
|
|
|
@ -339,67 +339,74 @@
@@ -339,67 +339,74 @@
|
|
|
|
|
<Header /> |
|
|
|
|
|
|
|
|
|
<main class="container mx-auto px-4 py-8"> |
|
|
|
|
{#if !isLoggedIn} |
|
|
|
|
<div class="text-center py-8"> |
|
|
|
|
<p>Please log in to view your lists.</p> |
|
|
|
|
<a href="/login" class="text-fog-accent dark:text-fog-dark-accent hover:underline">Go to login</a> |
|
|
|
|
</div> |
|
|
|
|
{:else if loading} |
|
|
|
|
<div class="text-center py-8"> |
|
|
|
|
<p>Loading lists...</p> |
|
|
|
|
</div> |
|
|
|
|
{:else if !hasLists} |
|
|
|
|
<div class="text-center py-8"> |
|
|
|
|
<h1 class="font-bold text-fog-text dark:text-fog-dark-text font-mono mb-4" style="font-size: 1.5em;">/Lists</h1> |
|
|
|
|
<p>You don't have any lists yet.</p> |
|
|
|
|
<p class="text-sm text-fog-text-light dark:text-fog-dark-text-light mt-2"> |
|
|
|
|
Create a kind 3 (contacts) or kind 30000 (follow_set) event to get started. |
|
|
|
|
</p> |
|
|
|
|
</div> |
|
|
|
|
{:else} |
|
|
|
|
<div class="lists-header mb-6"> |
|
|
|
|
<h1 class="font-bold text-fog-text dark:text-fog-dark-text font-mono mb-4" style="font-size: 1.5em;">/Lists</h1> |
|
|
|
|
|
|
|
|
|
<div class="list-selector mb-4"> |
|
|
|
|
<label for="list-select" class="block text-sm font-medium text-fog-text dark:text-fog-dark-text mb-2"> |
|
|
|
|
Select a list: |
|
|
|
|
</label> |
|
|
|
|
<select |
|
|
|
|
id="list-select" |
|
|
|
|
onchange={handleListChange} |
|
|
|
|
class="w-full max-w-md px-4 py-2 border border-fog-border dark:border-fog-dark-border rounded bg-fog-post dark:bg-fog-dark-post text-fog-text dark:text-fog-dark-text" |
|
|
|
|
> |
|
|
|
|
{#each lists as list, index} |
|
|
|
|
<option value={index} selected={selectedList === list}> |
|
|
|
|
Kind {list.kind}: {list.name} ({list.pubkeys.length} {list.pubkeys.length === 1 ? 'person' : 'people'}) |
|
|
|
|
</option> |
|
|
|
|
{/each} |
|
|
|
|
</select> |
|
|
|
|
<div class="lists-content"> |
|
|
|
|
{#if !isLoggedIn} |
|
|
|
|
<div class="text-center py-8"> |
|
|
|
|
<p>Please log in to view your lists.</p> |
|
|
|
|
<a href="/login" class="text-fog-accent dark:text-fog-dark-accent hover:underline">Go to login</a> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
{#if loadingEvents} |
|
|
|
|
{:else if loading} |
|
|
|
|
<div class="text-center py-8"> |
|
|
|
|
<p>Loading events...</p> |
|
|
|
|
<p>Loading lists...</p> |
|
|
|
|
</div> |
|
|
|
|
{:else if selectedList && events.length === 0} |
|
|
|
|
{:else if !hasLists} |
|
|
|
|
<div class="text-center py-8"> |
|
|
|
|
<p>No events found for this list.</p> |
|
|
|
|
<h1 class="font-bold text-fog-text dark:text-fog-dark-text font-mono mb-4" style="font-size: 1.5em;">/Lists</h1> |
|
|
|
|
<p>You don't have any lists yet.</p> |
|
|
|
|
<p class="text-sm text-fog-text-light dark:text-fog-dark-text-light mt-2"> |
|
|
|
|
Create a kind 3 (contacts) or kind 30000 (follow_set) event to get started. |
|
|
|
|
</p> |
|
|
|
|
</div> |
|
|
|
|
{:else if selectedList} |
|
|
|
|
<div class="events-list"> |
|
|
|
|
{#each paginatedEvents as event (event.id)} |
|
|
|
|
<FeedPost post={event} fullView={false} /> |
|
|
|
|
{/each} |
|
|
|
|
{:else} |
|
|
|
|
<div class="lists-header mb-6"> |
|
|
|
|
<h1 class="font-bold text-fog-text dark:text-fog-dark-text font-mono mb-4" style="font-size: 1.5em;">/Lists</h1> |
|
|
|
|
|
|
|
|
|
<div class="list-selector mb-4"> |
|
|
|
|
<label for="list-select" class="block text-sm font-medium text-fog-text dark:text-fog-dark-text mb-2"> |
|
|
|
|
Select a list: |
|
|
|
|
</label> |
|
|
|
|
<select |
|
|
|
|
id="list-select" |
|
|
|
|
onchange={handleListChange} |
|
|
|
|
class="w-full max-w-md px-4 py-2 border border-fog-border dark:border-fog-dark-border rounded bg-fog-post dark:bg-fog-dark-post text-fog-text dark:text-fog-dark-text" |
|
|
|
|
> |
|
|
|
|
{#each lists as list, index} |
|
|
|
|
<option value={index} selected={selectedList === list}> |
|
|
|
|
Kind {list.kind}: {list.name} ({list.pubkeys.length} {list.pubkeys.length === 1 ? 'person' : 'people'}) |
|
|
|
|
</option> |
|
|
|
|
{/each} |
|
|
|
|
</select> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
{#if events.length > ITEMS_PER_PAGE} |
|
|
|
|
<Pagination totalItems={events.length} itemsPerPage={ITEMS_PER_PAGE} /> |
|
|
|
|
|
|
|
|
|
{#if loadingEvents} |
|
|
|
|
<div class="text-center py-8"> |
|
|
|
|
<p>Loading events...</p> |
|
|
|
|
</div> |
|
|
|
|
{:else if selectedList && events.length === 0} |
|
|
|
|
<div class="text-center py-8"> |
|
|
|
|
<p>No events found for this list.</p> |
|
|
|
|
</div> |
|
|
|
|
{:else if selectedList} |
|
|
|
|
<div class="events-list"> |
|
|
|
|
{#each paginatedEvents as event (event.id)} |
|
|
|
|
<FeedPost post={event} fullView={false} /> |
|
|
|
|
{/each} |
|
|
|
|
</div> |
|
|
|
|
{#if events.length > ITEMS_PER_PAGE} |
|
|
|
|
<Pagination totalItems={events.length} itemsPerPage={ITEMS_PER_PAGE} /> |
|
|
|
|
{/if} |
|
|
|
|
{/if} |
|
|
|
|
{/if} |
|
|
|
|
{/if} |
|
|
|
|
</div> |
|
|
|
|
</main> |
|
|
|
|
|
|
|
|
|
<style> |
|
|
|
|
.lists-content { |
|
|
|
|
max-width: var(--content-width); |
|
|
|
|
margin: 0 auto; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.lists-header { |
|
|
|
|
border-bottom: 1px solid var(--fog-border, #e5e7eb); |
|
|
|
|
padding-bottom: 1rem; |
|
|
|
|
|