diff --git a/src/screens/PostThread/components/ThreadReply.tsx b/src/screens/PostThread/components/ThreadReply.tsx index ce5c1ddb70..6e160a23cb 100644 --- a/src/screens/PostThread/components/ThreadReply.tsx +++ b/src/screens/PostThread/components/ThreadReply.tsx @@ -27,7 +27,12 @@ import {TextLink} from '#/view/com/util/Link' import {PostCtrls} from '#/view/com/util/post-ctrls/PostCtrls' import {PostEmbeds, PostEmbedViewContext} from '#/view/com/util/post-embeds' import {PostMeta} from '#/view/com/util/PostMeta' -import {TREE_AVI_WIDTH, TREE_INDENT} from '#/screens/PostThread/const' +import { + OUTER_SPACE, + REPLY_LINE_WIDTH, + TREE_AVI_WIDTH, + TREE_INDENT, +} from '#/screens/PostThread/const' import {atoms as a, useTheme} from '#/alf' import {useInteractionState} from '#/components/hooks/useInteractionState' import {Trash_Stroke2_Corner0_Rounded as TrashIcon} from '#/components/icons/Trash' @@ -175,6 +180,8 @@ let PostThreadItemLoaded = ({ setLimitLines(false) }, [setLimitLines]) + const indents = Math.max(0, item.ui.indent - 1) + return ( - {Array.from(Array(item.ui.indent - 1)).map((_, n: number) => ( + {Array.from(Array(indents)).map((_, n: number) => ( + {item.ui.indent > 1 && ( + + )} = 0; pi--) { const parent = parents[pi] + if (item.depth <= parent.depth) { + /* + * Find the previous post item and set the `hasReadMore` flag + */ + for (let ui = i - 1; ui >= 0; ui--) { + let prev = flattened[ui] + if (prev.type === 'threadPost') { + prev.ui.hasReadMore = true + break + } + } + flattened.splice( i + 1 + (pi - parents.length), 0, @@ -94,6 +106,17 @@ export function flatten( for (let pi = parents.length - 1; pi >= 0; pi--) { const parent = parents[pi] if (parent.depth <= item.depth) { + /* + * Find the previous post item and set the `hasReadMore` flag + */ + for (let ui = i; ui >= 0; ui--) { + let prev = flattened[ui] + if (prev.type === 'threadPost') { + prev.ui.hasReadMore = true + break + } + } + flattened.splice( i + 2 + (pi - parents.length), 0, @@ -118,7 +141,7 @@ export function flatten( } } } - console.log(flattened) + // console.log(flattened) /* * Insert hidden items and buttons to show them diff --git a/src/state/queries/usePostThread/types.ts b/src/state/queries/usePostThread/types.ts index 1181f6b433..d28707e228 100644 --- a/src/state/queries/usePostThread/types.ts +++ b/src/state/queries/usePostThread/types.ts @@ -51,6 +51,8 @@ export type Slice = showChildReplyLine: boolean indent: number parentHasBranchingReplies: boolean + isDeadEnd: boolean + hasReadMore?: boolean } } | { diff --git a/src/state/queries/usePostThread/views.ts b/src/state/queries/usePostThread/views.ts index 2923528ce9..b04afba43e 100644 --- a/src/state/queries/usePostThread/views.ts +++ b/src/state/queries/usePostThread/views.ts @@ -69,6 +69,7 @@ export function threadPost({ depth, value, oneUp, + oneDown, moderationOpts, traversalMetadata, }: { @@ -104,6 +105,7 @@ export function threadPost({ ? depth : traversalMetadata?.indent || depth, parentHasBranchingReplies: !!traversalMetadata?.hasBranchingReplies, + isDeadEnd: !oneDown || oneDown?.depth < depth, }, } }