diff --git a/ROADMAP.md b/ROADMAP.md index a3f1fe3f..45e5f077 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,10 +1,8 @@ # Current -- [ ] Refactor - - Move global modals to child components? - - Combine app/agent, rename app -- [ ] Improve topic suggestions and rendering -- [ ] Add topic search +- [ ] Topics + - [ ] Improve topic suggestions and rendering + - [ ] Add topic search, keep cache of topics - [ ] Relays bounty - [ ] Ability to create custom feeds - [ ] Add global/following/network tabs to relay detail diff --git a/src/app/Modal.svelte b/src/app/Modal.svelte index cbdacfc9..6e30510c 100644 --- a/src/app/Modal.svelte +++ b/src/app/Modal.svelte @@ -14,6 +14,7 @@ import PersonList from "src/app/shared/PersonList.svelte" import PersonProfileInfo from "src/app/views/PersonProfileInfo.svelte" import PersonShare from "src/app/views/PersonShare.svelte" + import TopicFeed from "src/app/views/TopicFeed.svelte" import AddRelay from "src/app/views/RelayAdd.svelte" const closeModal = async () => { @@ -50,6 +51,10 @@ {:else if $modal.type === "person/followers"} + {:else if $modal.type === "topic/feed"} + {#key $modal.topic} + + {/key} {:else if $modal.type === "message"}
{$modal.message}
diff --git a/src/app/shared/Feed.svelte b/src/app/shared/Feed.svelte index aa3f658e..0ab64c05 100644 --- a/src/app/shared/Feed.svelte +++ b/src/app/shared/Feed.svelte @@ -17,6 +17,7 @@ export let filter export let relays = [] + export let inModal = false export let delta = timedelta(6, "hours") export let shouldDisplay = always(true) export let parentsTimeout = 500 @@ -105,7 +106,8 @@ } const loadMore = async () => { - if ($modal) { + console.log("here") + if ($modal && !inModal) { return } @@ -127,7 +129,9 @@ onChunk, }) - const scroller = createScroller(loadMore) + const scroller = createScroller(loadMore, { + element: inModal ? document.querySelector(".modal-content") : null, + }) return () => { scroller.stop() diff --git a/src/app/shared/NoteContent.svelte b/src/app/shared/NoteContent.svelte index c13971c1..5655d7f1 100644 --- a/src/app/shared/NoteContent.svelte +++ b/src/app/shared/NoteContent.svelte @@ -49,7 +49,7 @@ const next = content[i + 1] if ((!prev || prev.type === "newline") && (!next || next.type === "newline")) { - let n = 0 + let n = 1 for (let j = i - 1; ; j--) { if (content[j]?.type === "newline") { n += 1 @@ -58,7 +58,7 @@ } } - ranges.push({i, n}) + ranges.push({i: i + 1, n}) } } } @@ -108,6 +108,10 @@ const openQuote = id => { modal.set({type: "note/detail", note: {id}}) } + + const openTopic = topic => { + modal.set({type: "topic/feed", topic}) + }
@@ -117,6 +121,8 @@ {#each value as _}
{/each} + {:else if type === "topic"} + openTopic(value)}>{value} {:else if type === "link"} {value.replace(/https?:\/\/(www\.)?/, "")} diff --git a/src/app/views/TopicFeed.svelte b/src/app/views/TopicFeed.svelte new file mode 100644 index 00000000..6ee74216 --- /dev/null +++ b/src/app/views/TopicFeed.svelte @@ -0,0 +1,15 @@ + + + + {topic} + + diff --git a/src/util/misc.ts b/src/util/misc.ts index a493d075..fc2dba04 100644 --- a/src/util/misc.ts +++ b/src/util/misc.ts @@ -120,9 +120,11 @@ export const poll = (t, cb) => { } } -export const createScroller = (loadMore, {reverse = false, element = document.body} = {}) => { +export const createScroller = (loadMore, {reverse = false, element = null} = {}) => { const THRESHOLD = 2000 + element = element || document.body + // NOTE TO FUTURE SELF // If the scroller is saturating request channels on a slow relay, the // loadMore function is not properly awaiting all the work necessary.