From 83cfafbdae28f68399c1ae0c5099d4a9229ccd13 Mon Sep 17 00:00:00 2001 From: dawn <90008@gaze.systems> Date: Tue, 20 Jan 2026 20:07:33 +0300 Subject: [PATCH] refactor timeline component into reply timeline and feed timeline components --- src/components/EndOfList.svelte | 5 + src/components/FeedTimelineView.svelte | 182 +++++++++++++ src/components/LoadError.svelte | 22 ++ src/components/LoadingSpinner.svelte | 6 + src/components/ReplyTimelineView.svelte | 218 ++++++++++++++++ src/components/TimelineView.svelte | 327 ++---------------------- 6 files changed, 449 insertions(+), 311 deletions(-) create mode 100644 src/components/EndOfList.svelte create mode 100644 src/components/FeedTimelineView.svelte create mode 100644 src/components/LoadError.svelte create mode 100644 src/components/LoadingSpinner.svelte create mode 100644 src/components/ReplyTimelineView.svelte diff --git a/src/components/EndOfList.svelte b/src/components/EndOfList.svelte new file mode 100644 index 0000000..065317a --- /dev/null +++ b/src/components/EndOfList.svelte @@ -0,0 +1,5 @@ +
+

+ all posts seen! :o +

+
diff --git a/src/components/FeedTimelineView.svelte b/src/components/FeedTimelineView.svelte new file mode 100644 index 0000000..1c19cf5 --- /dev/null +++ b/src/components/FeedTimelineView.svelte @@ -0,0 +1,182 @@ + + +{#snippet feedPostsView()} + {#each feedPosts as post, i (post.uri)} + {@const uriParts = post.uri.split('/')} + {@const postDid = uriParts[2] as Did} + {@const postRkey = uriParts[4] as RecordKey} +
+ { + postComposerState.focus = 'focused'; + postComposerState.quoting = p; + }} + onReply={(p) => { + postComposerState.focus = 'focused'; + postComposerState.replying = p; + }} + /> +
+ {#if i < feedPosts.length - 1} +
+ {/if} + {/each} +{/snippet} + +
+ {#if newPostsAvailable} +
+ +
+ {/if} + {#if userDid || $accounts.length > 0} + + {@render feedPostsView()} + {#snippet noData()} + + {/snippet} + {#snippet loading()} + + {/snippet} + {#snippet error()} + + {/snippet} + + {:else} + + {/if} +
diff --git a/src/components/LoadError.svelte b/src/components/LoadError.svelte new file mode 100644 index 0000000..8e84527 --- /dev/null +++ b/src/components/LoadError.svelte @@ -0,0 +1,22 @@ + + +
+

+ x_x
+ {error} +

+
+ +
+
diff --git a/src/components/LoadingSpinner.svelte b/src/components/LoadingSpinner.svelte new file mode 100644 index 0000000..c354933 --- /dev/null +++ b/src/components/LoadingSpinner.svelte @@ -0,0 +1,6 @@ +
+
+
diff --git a/src/components/ReplyTimelineView.svelte b/src/components/ReplyTimelineView.svelte new file mode 100644 index 0000000..b597379 --- /dev/null +++ b/src/components/ReplyTimelineView.svelte @@ -0,0 +1,218 @@ + + +{#snippet replyPost(post: ThreadPost, reverse: boolean = reverseChronological)} + + {reverse ? '↱' : '↳'} + + +{/snippet} + +{#snippet threadsView()} + {#each threads as thread, i (thread.rootUri)} +
+ {#if thread.branchParentPost} + {@render replyPost(thread.branchParentPost)} + {/if} + {#each thread.posts as post, idx (post.data.uri)} + {@const mini = + !expandedThreads.has(thread.rootUri) && + thread.posts.length > 4 && + idx > 0 && + idx < thread.posts.length - 2} + {#if !mini} +
+ { + postComposerState.focus = 'focused'; + postComposerState.quoting = post; + }} + onReply={(post) => { + postComposerState.focus = 'focused'; + postComposerState.replying = post; + }} + {...post} + /> +
+ {:else if mini} + {#if idx === 1} + {@render replyPost(post, !reverseChronological)} + + {:else if idx === thread.posts.length - 3} + {@render replyPost(post)} + {/if} + {/if} + {/each} +
+ {#if i < threads.length - 1} +
+ {/if} + {/each} +{/snippet} + +
+ {#if did || $accounts.length > 0} + + {@render threadsView()} + {#snippet noData()} + + {/snippet} + {#snippet loading()} + + {/snippet} + {#snippet error()} + + {/snippet} + + {:else} + + {/if} +
diff --git a/src/components/TimelineView.svelte b/src/components/TimelineView.svelte index 7e097e8..15ccaa4 100644 --- a/src/components/TimelineView.svelte +++ b/src/components/TimelineView.svelte @@ -1,30 +1,9 @@ -{#snippet replyPost(post: ThreadPost, reverse: boolean = reverseChronological)} - - {reverse ? '↱' : '↳'} - - -{/snippet} - -{#snippet threadsView()} - {#each threads as thread, i (thread.rootUri)} -
- {#if thread.branchParentPost} - {@render replyPost(thread.branchParentPost)} - {/if} - {#each thread.posts as post, idx (post.data.uri)} - {@const mini = - !expandedThreads.has(thread.rootUri) && - thread.posts.length > 4 && - idx > 0 && - idx < thread.posts.length - 2} - {#if !mini} -
- { - postComposerState.focus = 'focused'; - postComposerState.quoting = post; - }} - onReply={(post) => { - postComposerState.focus = 'focused'; - postComposerState.replying = post; - }} - {...post} - /> -
- {:else if mini} - {#if idx === 1} - {@render replyPost(post, !reverseChronological)} - - {:else if idx === thread.posts.length - 3} - {@render replyPost(post)} - {/if} - {/if} - {/each} -
- {#if i < threads.length - 1} -
- {/if} - {/each} -{/snippet} - -{#snippet feedPostsView()} - {#each feedPosts as post, i (post.uri)} - {@const uriParts = post.uri.split('/')} - {@const postDid = uriParts[2] as Did} - {@const postRkey = uriParts[4] as RecordKey} -
- { - postComposerState.focus = 'focused'; - postComposerState.quoting = p; - }} - onReply={(p) => { - postComposerState.focus = 'focused'; - postComposerState.replying = p; - }} - /> -
- {#if i < feedPosts.length - 1} -
- {/if} - {/each} -{/snippet} - -
- {#if newPostsAvailable} -
- -
- {/if} - {#if targetDid || $accounts.length > 0} - - {#if selectedFeed} - {@render feedPostsView()} - {:else} - {@render threadsView()} - {/if} - {#snippet noData()} -
-

- all posts seen! :o -

-
- {/snippet} - {#snippet loading()} -
-
-
- {/snippet} - {#snippet error()} -
-

- x_x
- {loadError} -

-
- -
-
- {/snippet} -
- {:else} - - {/if} -
+{#if selectedFeed} + +{:else} + +{/if} -- 2.51.2