refactor(feed): remove NoSnippetWrapper from FeedPage in favor of dataSet attribute
Replaces NoSnippetWrapper with a dataSet prop on the root View to control the nosnippet attribute for discover feeds. This simplifies the component structure and improves maintainability by reducing unnecessary wrappers.
This commit is contained in:
@@ -18,8 +18,11 @@ import {listenSoftReset} from '#/state/events'
|
|||||||
import {FeedFeedbackProvider, useFeedFeedback} from '#/state/feed-feedback'
|
import {FeedFeedbackProvider, useFeedFeedback} from '#/state/feed-feedback'
|
||||||
import {useSetHomeBadge} from '#/state/home-badge'
|
import {useSetHomeBadge} from '#/state/home-badge'
|
||||||
import {type FeedSourceInfo} from '#/state/queries/feed'
|
import {type FeedSourceInfo} from '#/state/queries/feed'
|
||||||
import {RQKEY as FEED_RQKEY} from '#/state/queries/post-feed'
|
import {
|
||||||
import {type FeedDescriptor, type FeedParams} from '#/state/queries/post-feed'
|
type FeedDescriptor,
|
||||||
|
type FeedParams,
|
||||||
|
RQKEY as FEED_RQKEY,
|
||||||
|
} from '#/state/queries/post-feed'
|
||||||
import {truncateAndInvalidate} from '#/state/queries/util'
|
import {truncateAndInvalidate} from '#/state/queries/util'
|
||||||
import {useSession} from '#/state/session'
|
import {useSession} from '#/state/session'
|
||||||
import {useSetMinimalShellMode} from '#/state/shell'
|
import {useSetMinimalShellMode} from '#/state/shell'
|
||||||
@@ -29,7 +32,6 @@ import {FAB} from '../util/fab/FAB'
|
|||||||
import {type ListMethods} from '../util/List'
|
import {type ListMethods} from '../util/List'
|
||||||
import {LoadLatestBtn} from '../util/load-latest/LoadLatestBtn'
|
import {LoadLatestBtn} from '../util/load-latest/LoadLatestBtn'
|
||||||
import {MainScrollProvider} from '../util/MainScrollProvider'
|
import {MainScrollProvider} from '../util/MainScrollProvider'
|
||||||
import {NoSnippetWrapper} from '../util/NoSnippetWrapper'
|
|
||||||
|
|
||||||
const POLL_FREQ = 60e3 // 60sec
|
const POLL_FREQ = 60e3 // 60sec
|
||||||
|
|
||||||
@@ -133,49 +135,48 @@ export function FeedPage({
|
|||||||
|
|
||||||
const shouldPrefetch = isNative && isPageAdjacent
|
const shouldPrefetch = isNative && isPageAdjacent
|
||||||
return (
|
return (
|
||||||
<NoSnippetWrapper enabled={isDiscoverFeed}>
|
<View
|
||||||
<View testID={testID}>
|
testID={testID}
|
||||||
<MainScrollProvider>
|
// @ts-expect-error web only -sfn
|
||||||
<FeedFeedbackProvider value={feedFeedback}>
|
dataSet={{nosnippet: isDiscoverFeed ? '' : undefined}}>
|
||||||
<PostFeed
|
<MainScrollProvider>
|
||||||
testID={testID ? `${testID}-feed` : undefined}
|
<FeedFeedbackProvider value={feedFeedback}>
|
||||||
enabled={isPageFocused || shouldPrefetch}
|
<PostFeed
|
||||||
feed={feed}
|
testID={testID ? `${testID}-feed` : undefined}
|
||||||
feedParams={feedParams}
|
enabled={isPageFocused || shouldPrefetch}
|
||||||
pollInterval={POLL_FREQ}
|
feed={feed}
|
||||||
disablePoll={hasNew || !isPageFocused}
|
feedParams={feedParams}
|
||||||
scrollElRef={scrollElRef}
|
pollInterval={POLL_FREQ}
|
||||||
onScrolledDownChange={setIsScrolledDown}
|
disablePoll={hasNew || !isPageFocused}
|
||||||
onHasNew={setHasNew}
|
scrollElRef={scrollElRef}
|
||||||
renderEmptyState={renderEmptyState}
|
onScrolledDownChange={setIsScrolledDown}
|
||||||
renderEndOfFeed={renderEndOfFeed}
|
onHasNew={setHasNew}
|
||||||
headerOffset={headerOffset}
|
renderEmptyState={renderEmptyState}
|
||||||
savedFeedConfig={savedFeedConfig}
|
renderEndOfFeed={renderEndOfFeed}
|
||||||
isVideoFeed={isVideoFeed}
|
headerOffset={headerOffset}
|
||||||
/>
|
savedFeedConfig={savedFeedConfig}
|
||||||
</FeedFeedbackProvider>
|
isVideoFeed={isVideoFeed}
|
||||||
</MainScrollProvider>
|
|
||||||
{(isScrolledDown || hasNew) && (
|
|
||||||
<LoadLatestBtn
|
|
||||||
onPress={onPressLoadLatest}
|
|
||||||
label={_(msg`Load new posts`)}
|
|
||||||
showIndicator={hasNew}
|
|
||||||
/>
|
/>
|
||||||
)}
|
</FeedFeedbackProvider>
|
||||||
|
</MainScrollProvider>
|
||||||
|
{(isScrolledDown || hasNew) && (
|
||||||
|
<LoadLatestBtn
|
||||||
|
onPress={onPressLoadLatest}
|
||||||
|
label={_(msg`Load new posts`)}
|
||||||
|
showIndicator={hasNew}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
|
||||||
{hasSession && (
|
{hasSession && (
|
||||||
<FAB
|
<FAB
|
||||||
testID="composeFAB"
|
testID="composeFAB"
|
||||||
onPress={onPressCompose}
|
onPress={onPressCompose}
|
||||||
icon={<ComposeIcon2 strokeWidth={1.5} size={29} style={s.white} />}
|
icon={<ComposeIcon2 strokeWidth={1.5} size={29} style={s.white} />}
|
||||||
accessibilityRole="button"
|
accessibilityRole="button"
|
||||||
accessibilityLabel={_(
|
accessibilityLabel={_(msg({message: `New post`, context: 'action'}))}
|
||||||
msg({message: `New post`, context: 'action'}),
|
accessibilityHint=""
|
||||||
)}
|
/>
|
||||||
accessibilityHint=""
|
)}
|
||||||
/>
|
</View>
|
||||||
)}
|
|
||||||
</View>
|
|
||||||
</NoSnippetWrapper>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
import {type ViewProps} from 'react-native'
|
|
||||||
// @ts-expect-error untyped
|
|
||||||
import {unstable_createElement} from 'react-native-web'
|
|
||||||
|
|
||||||
import {isWeb} from '#/platform/detection'
|
|
||||||
|
|
||||||
interface Props extends ViewProps {
|
|
||||||
enabled: boolean
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* NoSnippetWrapper prevents search engines from displaying snippets of its content.
|
|
||||||
*
|
|
||||||
* If running on web and enabled, wraps children in a <div> with data-nosnippet attribute.
|
|
||||||
* Otherwise, renders children directly.
|
|
||||||
*
|
|
||||||
* @param enabled - Whether to apply the data-nosnippet attribute.
|
|
||||||
* @param viewProps - Additional props for the wrapper element.
|
|
||||||
*/
|
|
||||||
export function NoSnippetWrapper({enabled, ...viewProps}: Props) {
|
|
||||||
if (isWeb && enabled) {
|
|
||||||
return unstable_createElement('div', {
|
|
||||||
...viewProps,
|
|
||||||
'data-nosnippet': '',
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
return <>{viewProps.children}</>
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user