Trim replies in the post thread that are pwi opt-out
This commit is contained in:
@@ -157,7 +157,9 @@ function PostThreadLoaded({
|
|||||||
// construct content
|
// construct content
|
||||||
const posts = React.useMemo(() => {
|
const posts = React.useMemo(() => {
|
||||||
let arr = [TOP_COMPONENT].concat(
|
let arr = [TOP_COMPONENT].concat(
|
||||||
Array.from(flattenThreadSkeleton(sortThread(thread, threadViewPrefs))),
|
Array.from(
|
||||||
|
flattenThreadSkeleton(sortThread(thread, threadViewPrefs), hasSession),
|
||||||
|
),
|
||||||
)
|
)
|
||||||
if (arr.length > maxVisible) {
|
if (arr.length > maxVisible) {
|
||||||
arr = arr.slice(0, maxVisible).concat([LOAD_MORE])
|
arr = arr.slice(0, maxVisible).concat([LOAD_MORE])
|
||||||
@@ -166,7 +168,7 @@ function PostThreadLoaded({
|
|||||||
arr.push(BOTTOM_COMPONENT)
|
arr.push(BOTTOM_COMPONENT)
|
||||||
}
|
}
|
||||||
return arr
|
return arr
|
||||||
}, [thread, maxVisible, threadViewPrefs])
|
}, [thread, maxVisible, threadViewPrefs, hasSession])
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* NOTE
|
* NOTE
|
||||||
@@ -468,20 +470,24 @@ function isThreadPost(v: unknown): v is ThreadPost {
|
|||||||
|
|
||||||
function* flattenThreadSkeleton(
|
function* flattenThreadSkeleton(
|
||||||
node: ThreadNode,
|
node: ThreadNode,
|
||||||
|
hasSession: boolean,
|
||||||
): Generator<YieldedItem, void> {
|
): Generator<YieldedItem, void> {
|
||||||
if (node.type === 'post') {
|
if (node.type === 'post') {
|
||||||
if (node.parent) {
|
if (node.parent) {
|
||||||
yield* flattenThreadSkeleton(node.parent)
|
yield* flattenThreadSkeleton(node.parent, hasSession)
|
||||||
} else if (node.ctx.isParentLoading) {
|
} else if (node.ctx.isParentLoading) {
|
||||||
yield PARENT_SPINNER
|
yield PARENT_SPINNER
|
||||||
}
|
}
|
||||||
|
if (!hasSession && node.ctx.depth > 0 && hasPwiOptOut(node)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
yield node
|
yield node
|
||||||
if (node.ctx.isHighlightedPost && !node.post.viewer?.replyDisabled) {
|
if (node.ctx.isHighlightedPost && !node.post.viewer?.replyDisabled) {
|
||||||
yield REPLY_PROMPT
|
yield REPLY_PROMPT
|
||||||
}
|
}
|
||||||
if (node.replies?.length) {
|
if (node.replies?.length) {
|
||||||
for (const reply of node.replies) {
|
for (const reply of node.replies) {
|
||||||
yield* flattenThreadSkeleton(reply)
|
yield* flattenThreadSkeleton(reply, hasSession)
|
||||||
}
|
}
|
||||||
} else if (node.ctx.isChildLoading) {
|
} else if (node.ctx.isChildLoading) {
|
||||||
yield CHILD_SPINNER
|
yield CHILD_SPINNER
|
||||||
@@ -493,6 +499,10 @@ function* flattenThreadSkeleton(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function hasPwiOptOut(node: ThreadPost) {
|
||||||
|
return !!node.post.author.labels?.find(l => l.val === '!no-unauthenticated')
|
||||||
|
}
|
||||||
|
|
||||||
function hasBranchingReplies(node: ThreadNode) {
|
function hasBranchingReplies(node: ThreadNode) {
|
||||||
if (node.type !== 'post') {
|
if (node.type !== 'post') {
|
||||||
return false
|
return false
|
||||||
|
|||||||
Reference in New Issue
Block a user