0 ? `${Math.min(depth, 8) * 1.25}rem` : undefined }}
+ >
+
+
+ {(post.replies || []).map((reply) => (
+
+ ))}
+
+
+ )
+}
+
+export default PostThreadNode
diff --git a/src/components/post-thread-modal/thread-profiles.js b/src/components/post-thread-modal/thread-profiles.js
new file mode 100644
index 0000000..eb879e2
--- /dev/null
+++ b/src/components/post-thread-modal/thread-profiles.js
@@ -0,0 +1,40 @@
+/*
+ Helpers for loading display names and avatars for thread participants.
+*/
+
+export function collectPostAddrs (posts) {
+ return [...new Set((posts || []).map((post) => post.addr).filter(Boolean))]
+}
+
+export function collectThreadAddrs (post) {
+ const addrs = new Set()
+
+ function walk (node) {
+ if (!node?.addr) return
+ addrs.add(node.addr)
+ for (const reply of node.replies || []) {
+ walk(reply)
+ }
+ }
+
+ walk(post)
+ return [...addrs]
+}
+
+export async function loadThreadProfiles (addrs, memoDb) {
+ const profiles = {}
+
+ await Promise.all(addrs.map(async (addr) => {
+ const [nameRecord, profilePic] = await Promise.all([
+ memoDb.getName(addr),
+ memoDb.getProfilePic(addr)
+ ])
+
+ profiles[addr] = {
+ name: nameRecord?.name || null,
+ profilePicUrl: profilePic?.url || null
+ }
+ }))
+
+ return profiles
+}
diff --git a/src/services/memo-db.js b/src/services/memo-db.js
index 1704aec..fea9537 100644
--- a/src/services/memo-db.js
+++ b/src/services/memo-db.js
@@ -66,6 +66,21 @@ class MemoDb {
}
}
+ async getName (addr) {
+ try {
+ const result = await this.axios.get(
+ `${config.backend}/level/name/${encodeURIComponent(addr)}`
+ )
+ return result.data
+ } catch (err) {
+ if (err.response && err.response.status === 404) {
+ return null
+ }
+ console.error('Error in getName()')
+ throw err
+ }
+ }
+
async getPostsByAddr (addr, { limit = 100, offset = 0 } = {}) {
try {
const result = await this.axios.get(
@@ -79,6 +94,19 @@ class MemoDb {
throw err
}
}
+
+ async getPostThread (txid) {
+ try {
+ const result = await this.axios.get(
+ `${config.backend}/posts/${encodeURIComponent(txid)}/thread`
+ )
+
+ return result.data
+ } catch (err) {
+ console.error('Error in getPostThread()')
+ throw err
+ }
+ }
}
export default MemoDb