Rename tree post
This commit is contained in:
+98
-94
@@ -49,7 +49,7 @@ import {Text} from '#/components/Typography'
|
|||||||
*/
|
*/
|
||||||
const TREE_AVI_PLUS_SPACE = TREE_AVI_WIDTH + a.gap_xs.gap
|
const TREE_AVI_PLUS_SPACE = TREE_AVI_WIDTH + a.gap_xs.gap
|
||||||
|
|
||||||
export function ThreadReply({
|
export function ThreadItemTreePost({
|
||||||
item,
|
item,
|
||||||
overrides,
|
overrides,
|
||||||
onPostSuccess,
|
onPostSuccess,
|
||||||
@@ -66,11 +66,11 @@ export function ThreadReply({
|
|||||||
const postShadow = usePostShadow(item.value.post)
|
const postShadow = usePostShadow(item.value.post)
|
||||||
|
|
||||||
if (postShadow === POST_TOMBSTONE) {
|
if (postShadow === POST_TOMBSTONE) {
|
||||||
return <ThreadItemTreeReplyDeleted item={item} />
|
return <ThreadItemTreePostDeleted item={item} />
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ThreadReplyInner
|
<ThreadItemTreePostInner
|
||||||
// Safeguard from clobbering per-post state below:
|
// Safeguard from clobbering per-post state below:
|
||||||
key={postShadow.uri}
|
key={postShadow.uri}
|
||||||
item={item}
|
item={item}
|
||||||
@@ -82,15 +82,15 @@ export function ThreadReply({
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
function ThreadItemTreeReplyDeleted({
|
function ThreadItemTreePostDeleted({
|
||||||
item,
|
item,
|
||||||
}: {
|
}: {
|
||||||
item: Extract<ThreadItem, {type: 'threadPost'}>
|
item: Extract<ThreadItem, {type: 'threadPost'}>
|
||||||
}) {
|
}) {
|
||||||
const t = useTheme()
|
const t = useTheme()
|
||||||
return (
|
return (
|
||||||
<ThreadItemTreeReplyOuter item={item}>
|
<ThreadItemTreePostOuterWrapper item={item}>
|
||||||
<ThreadItemTreeReplyInner item={item}>
|
<ThreadItemTreePostInnerWrapper item={item}>
|
||||||
<View
|
<View
|
||||||
style={[
|
style={[
|
||||||
a.flex_row,
|
a.flex_row,
|
||||||
@@ -111,101 +111,105 @@ function ThreadItemTreeReplyDeleted({
|
|||||||
{item.ui.isLastChild && !item.ui.precedesChildReadMore && (
|
{item.ui.isLastChild && !item.ui.precedesChildReadMore && (
|
||||||
<View style={{height: OUTER_SPACE / 2}} />
|
<View style={{height: OUTER_SPACE / 2}} />
|
||||||
)}
|
)}
|
||||||
</ThreadItemTreeReplyInner>
|
</ThreadItemTreePostInnerWrapper>
|
||||||
</ThreadItemTreeReplyOuter>
|
</ThreadItemTreePostOuterWrapper>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const ThreadItemTreeReplyOuter = memo(function ThreadItemTreeReplyOuter({
|
const ThreadItemTreePostOuterWrapper = memo(
|
||||||
item,
|
function ThreadItemTreePostOuterWrapper({
|
||||||
children,
|
item,
|
||||||
}: {
|
children,
|
||||||
item: Extract<ThreadItem, {type: 'threadPost'}>
|
}: {
|
||||||
children: React.ReactNode
|
item: Extract<ThreadItem, {type: 'threadPost'}>
|
||||||
}) {
|
children: React.ReactNode
|
||||||
const t = useTheme()
|
}) {
|
||||||
const indents = Math.max(0, item.ui.indent - 1)
|
const t = useTheme()
|
||||||
|
const indents = Math.max(0, item.ui.indent - 1)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View
|
<View
|
||||||
style={[
|
style={[
|
||||||
a.flex_row,
|
a.flex_row,
|
||||||
item.ui.indent === 1 &&
|
item.ui.indent === 1 &&
|
||||||
!item.ui.showParentReplyLine && [
|
!item.ui.showParentReplyLine && [
|
||||||
a.border_t,
|
a.border_t,
|
||||||
t.atoms.border_contrast_low,
|
t.atoms.border_contrast_low,
|
||||||
|
],
|
||||||
|
]}>
|
||||||
|
{Array.from(Array(indents)).map((_, n: number) => {
|
||||||
|
const isSkipped = item.ui.skippedIndentIndices.has(n)
|
||||||
|
return (
|
||||||
|
<View
|
||||||
|
key={`${item.value.post.uri}-padding-${n}`}
|
||||||
|
style={[
|
||||||
|
t.atoms.border_contrast_low,
|
||||||
|
{
|
||||||
|
borderRightWidth: isSkipped ? 0 : REPLY_LINE_WIDTH,
|
||||||
|
width: TREE_INDENT + TREE_AVI_WIDTH / 2,
|
||||||
|
left: 1,
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
})}
|
||||||
|
{children}
|
||||||
|
</View>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
const ThreadItemTreePostInnerWrapper = memo(
|
||||||
|
function ThreadItemTreePostInnerWrapper({
|
||||||
|
item,
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
item: Extract<ThreadItem, {type: 'threadPost'}>
|
||||||
|
children: React.ReactNode
|
||||||
|
}) {
|
||||||
|
const t = useTheme()
|
||||||
|
return (
|
||||||
|
<View
|
||||||
|
style={[
|
||||||
|
a.flex_1, // TODO check on ios
|
||||||
|
{
|
||||||
|
paddingHorizontal: OUTER_SPACE,
|
||||||
|
paddingTop: OUTER_SPACE / 2,
|
||||||
|
},
|
||||||
|
item.ui.indent === 1 && [
|
||||||
|
!item.ui.showParentReplyLine && a.pt_lg,
|
||||||
|
!item.ui.showChildReplyLine && a.pb_sm,
|
||||||
],
|
],
|
||||||
]}>
|
item.ui.isLastChild &&
|
||||||
{Array.from(Array(indents)).map((_, n: number) => {
|
!item.ui.precedesChildReadMore && [
|
||||||
const isSkipped = item.ui.skippedIndentIndices.has(n)
|
{
|
||||||
return (
|
paddingBottom: OUTER_SPACE / 2,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
]}>
|
||||||
|
{item.ui.indent > 1 && (
|
||||||
<View
|
<View
|
||||||
key={`${item.value.post.uri}-padding-${n}`}
|
|
||||||
style={[
|
style={[
|
||||||
|
a.absolute,
|
||||||
t.atoms.border_contrast_low,
|
t.atoms.border_contrast_low,
|
||||||
{
|
{
|
||||||
borderRightWidth: isSkipped ? 0 : REPLY_LINE_WIDTH,
|
left: -1,
|
||||||
width: TREE_INDENT + TREE_AVI_WIDTH / 2,
|
top: 0,
|
||||||
left: 1,
|
height:
|
||||||
|
TREE_AVI_WIDTH / 2 + REPLY_LINE_WIDTH / 2 + OUTER_SPACE / 2,
|
||||||
|
width: OUTER_SPACE,
|
||||||
|
borderLeftWidth: REPLY_LINE_WIDTH,
|
||||||
|
borderBottomWidth: REPLY_LINE_WIDTH,
|
||||||
|
borderBottomLeftRadius: a.rounded_sm.borderRadius,
|
||||||
},
|
},
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
)
|
)}
|
||||||
})}
|
{children}
|
||||||
{children}
|
</View>
|
||||||
</View>
|
)
|
||||||
)
|
},
|
||||||
})
|
)
|
||||||
|
|
||||||
const ThreadItemTreeReplyInner = memo(function ThreadItemTreeReplyInner({
|
|
||||||
item,
|
|
||||||
children,
|
|
||||||
}: {
|
|
||||||
item: Extract<ThreadItem, {type: 'threadPost'}>
|
|
||||||
children: React.ReactNode
|
|
||||||
}) {
|
|
||||||
const t = useTheme()
|
|
||||||
return (
|
|
||||||
<View
|
|
||||||
style={[
|
|
||||||
a.flex_1, // TODO check on ios
|
|
||||||
{
|
|
||||||
paddingHorizontal: OUTER_SPACE,
|
|
||||||
paddingTop: OUTER_SPACE / 2,
|
|
||||||
},
|
|
||||||
item.ui.indent === 1 && [
|
|
||||||
!item.ui.showParentReplyLine && a.pt_lg,
|
|
||||||
!item.ui.showChildReplyLine && a.pb_sm,
|
|
||||||
],
|
|
||||||
item.ui.isLastChild &&
|
|
||||||
!item.ui.precedesChildReadMore && [
|
|
||||||
{
|
|
||||||
paddingBottom: OUTER_SPACE / 2,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
]}>
|
|
||||||
{item.ui.indent > 1 && (
|
|
||||||
<View
|
|
||||||
style={[
|
|
||||||
a.absolute,
|
|
||||||
t.atoms.border_contrast_low,
|
|
||||||
{
|
|
||||||
left: -1,
|
|
||||||
top: 0,
|
|
||||||
height:
|
|
||||||
TREE_AVI_WIDTH / 2 + REPLY_LINE_WIDTH / 2 + OUTER_SPACE / 2,
|
|
||||||
width: OUTER_SPACE,
|
|
||||||
borderLeftWidth: REPLY_LINE_WIDTH,
|
|
||||||
borderBottomWidth: REPLY_LINE_WIDTH,
|
|
||||||
borderBottomLeftRadius: a.rounded_sm.borderRadius,
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
{children}
|
|
||||||
</View>
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
const ThreadItemTreeReplyChildReplyLine = memo(
|
const ThreadItemTreeReplyChildReplyLine = memo(
|
||||||
function ThreadItemTreeReplyChildReplyLine({
|
function ThreadItemTreeReplyChildReplyLine({
|
||||||
@@ -234,7 +238,7 @@ const ThreadItemTreeReplyChildReplyLine = memo(
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
const ThreadReplyInner = memo(function ThreadReplyInner({
|
const ThreadItemTreePostInner = memo(function ThreadItemTreePostInner({
|
||||||
item,
|
item,
|
||||||
postShadow,
|
postShadow,
|
||||||
overrides,
|
overrides,
|
||||||
@@ -311,7 +315,7 @@ const ThreadReplyInner = memo(function ThreadReplyInner({
|
|||||||
}, [setLimitLines])
|
}, [setLimitLines])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ThreadItemTreeReplyOuter item={item}>
|
<ThreadItemTreePostOuterWrapper item={item}>
|
||||||
<SubtleHover>
|
<SubtleHover>
|
||||||
<PostHider
|
<PostHider
|
||||||
testID={`postThreadItem-by-${post.author.handle}`}
|
testID={`postThreadItem-by-${post.author.handle}`}
|
||||||
@@ -322,7 +326,7 @@ const ThreadReplyInner = memo(function ThreadReplyInner({
|
|||||||
iconStyles={{marginLeft: 2, marginRight: 2}}
|
iconStyles={{marginLeft: 2, marginRight: 2}}
|
||||||
profile={post.author}
|
profile={post.author}
|
||||||
interpretFilterAsBlur>
|
interpretFilterAsBlur>
|
||||||
<ThreadItemTreeReplyInner item={item}>
|
<ThreadItemTreePostInnerWrapper item={item}>
|
||||||
<View style={[a.flex_row, a.gap_md]}>
|
<View style={[a.flex_row, a.gap_md]}>
|
||||||
<View style={[a.flex_1]}>
|
<View style={[a.flex_1]}>
|
||||||
<PostMeta
|
<PostMeta
|
||||||
@@ -386,10 +390,10 @@ const ThreadReplyInner = memo(function ThreadReplyInner({
|
|||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
</ThreadItemTreeReplyInner>
|
</ThreadItemTreePostInnerWrapper>
|
||||||
</PostHider>
|
</PostHider>
|
||||||
</SubtleHover>
|
</SubtleHover>
|
||||||
</ThreadItemTreeReplyOuter>
|
</ThreadItemTreePostOuterWrapper>
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -19,11 +19,11 @@ import {
|
|||||||
ThreadAnchor,
|
ThreadAnchor,
|
||||||
ThreadAnchorSkeleton,
|
ThreadAnchorSkeleton,
|
||||||
} from '#/screens/PostThread/components/ThreadAnchor'
|
} from '#/screens/PostThread/components/ThreadAnchor'
|
||||||
|
import {ThreadItemTreePost} from '#/screens/PostThread/components/ThreadItemTreePost'
|
||||||
import {
|
import {
|
||||||
ThreadPost,
|
ThreadPost,
|
||||||
ThreadPostSkeleton,
|
ThreadPostSkeleton,
|
||||||
} from '#/screens/PostThread/components/ThreadPost'
|
} from '#/screens/PostThread/components/ThreadPost'
|
||||||
import {ThreadReply} from '#/screens/PostThread/components/ThreadReply'
|
|
||||||
import {atoms as a, useBreakpoints, useTheme, web} from '#/alf'
|
import {atoms as a, useBreakpoints, useTheme, web} from '#/alf'
|
||||||
import * as Layout from '#/components/Layout'
|
import * as Layout from '#/components/Layout'
|
||||||
import {ListFooter} from '#/components/Lists'
|
import {ListFooter} from '#/components/Lists'
|
||||||
@@ -234,7 +234,7 @@ export function Inner({uri}: {uri: string | undefined}) {
|
|||||||
} else {
|
} else {
|
||||||
if (thread.state.view === 'tree') {
|
if (thread.state.view === 'tree') {
|
||||||
return (
|
return (
|
||||||
<ThreadReply
|
<ThreadItemTreePost
|
||||||
item={item}
|
item={item}
|
||||||
threadgateRecord={thread.data.threadgate?.record ?? undefined}
|
threadgateRecord={thread.data.threadgate?.record ?? undefined}
|
||||||
overrides={{
|
overrides={{
|
||||||
|
|||||||
Reference in New Issue
Block a user