about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorCaidan Williams <caidan@internet.dev>2025-08-26 14:07:18 -0700
committerCaidan Williams <caidan@internet.dev>2025-08-27 11:58:58 -0700
commitbd730db03ecf90efc66953f222d5a7a43cdefe2f (patch)
treeee9f8f94a61e70a3d8036d8dc6c45e207885221a /src
parent6ddc268b91d990da6ef754323310227690378556 (diff)
downloadvoidsky-bd730db03ecf90efc66953f222d5a7a43cdefe2f.tar.zst
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.
Diffstat (limited to 'src')
-rw-r--r--src/view/com/feeds/FeedPage.tsx91
-rw-r--r--src/view/com/util/NoSnippetWrapper.tsx29
2 files changed, 46 insertions, 74 deletions
diff --git a/src/view/com/feeds/FeedPage.tsx b/src/view/com/feeds/FeedPage.tsx
index 26c28729c..3b4812f1c 100644
--- a/src/view/com/feeds/FeedPage.tsx
+++ b/src/view/com/feeds/FeedPage.tsx
@@ -18,8 +18,11 @@ import {listenSoftReset} from '#/state/events'
 import {FeedFeedbackProvider, useFeedFeedback} from '#/state/feed-feedback'
 import {useSetHomeBadge} from '#/state/home-badge'
 import {type FeedSourceInfo} from '#/state/queries/feed'
-import {RQKEY as FEED_RQKEY} from '#/state/queries/post-feed'
-import {type FeedDescriptor, type FeedParams} from '#/state/queries/post-feed'
+import {
+  type FeedDescriptor,
+  type FeedParams,
+  RQKEY as FEED_RQKEY,
+} from '#/state/queries/post-feed'
 import {truncateAndInvalidate} from '#/state/queries/util'
 import {useSession} from '#/state/session'
 import {useSetMinimalShellMode} from '#/state/shell'
@@ -29,7 +32,6 @@ import {FAB} from '../util/fab/FAB'
 import {type ListMethods} from '../util/List'
 import {LoadLatestBtn} from '../util/load-latest/LoadLatestBtn'
 import {MainScrollProvider} from '../util/MainScrollProvider'
-import {NoSnippetWrapper} from '../util/NoSnippetWrapper'
 
 const POLL_FREQ = 60e3 // 60sec
 
@@ -133,49 +135,48 @@ export function FeedPage({
 
   const shouldPrefetch = isNative && isPageAdjacent
   return (
-    <NoSnippetWrapper enabled={isDiscoverFeed}>
-      <View testID={testID}>
-        <MainScrollProvider>
-          <FeedFeedbackProvider value={feedFeedback}>
-            <PostFeed
-              testID={testID ? `${testID}-feed` : undefined}
-              enabled={isPageFocused || shouldPrefetch}
-              feed={feed}
-              feedParams={feedParams}
-              pollInterval={POLL_FREQ}
-              disablePoll={hasNew || !isPageFocused}
-              scrollElRef={scrollElRef}
-              onScrolledDownChange={setIsScrolledDown}
-              onHasNew={setHasNew}
-              renderEmptyState={renderEmptyState}
-              renderEndOfFeed={renderEndOfFeed}
-              headerOffset={headerOffset}
-              savedFeedConfig={savedFeedConfig}
-              isVideoFeed={isVideoFeed}
-            />
-          </FeedFeedbackProvider>
-        </MainScrollProvider>
-        {(isScrolledDown || hasNew) && (
-          <LoadLatestBtn
-            onPress={onPressLoadLatest}
-            label={_(msg`Load new posts`)}
-            showIndicator={hasNew}
+    <View
+      testID={testID}
+      // @ts-expect-error web only -sfn
+      dataSet={{nosnippet: isDiscoverFeed ? '' : undefined}}>
+      <MainScrollProvider>
+        <FeedFeedbackProvider value={feedFeedback}>
+          <PostFeed
+            testID={testID ? `${testID}-feed` : undefined}
+            enabled={isPageFocused || shouldPrefetch}
+            feed={feed}
+            feedParams={feedParams}
+            pollInterval={POLL_FREQ}
+            disablePoll={hasNew || !isPageFocused}
+            scrollElRef={scrollElRef}
+            onScrolledDownChange={setIsScrolledDown}
+            onHasNew={setHasNew}
+            renderEmptyState={renderEmptyState}
+            renderEndOfFeed={renderEndOfFeed}
+            headerOffset={headerOffset}
+            savedFeedConfig={savedFeedConfig}
+            isVideoFeed={isVideoFeed}
           />
-        )}
+        </FeedFeedbackProvider>
+      </MainScrollProvider>
+      {(isScrolledDown || hasNew) && (
+        <LoadLatestBtn
+          onPress={onPressLoadLatest}
+          label={_(msg`Load new posts`)}
+          showIndicator={hasNew}
+        />
+      )}
 
-        {hasSession && (
-          <FAB
-            testID="composeFAB"
-            onPress={onPressCompose}
-            icon={<ComposeIcon2 strokeWidth={1.5} size={29} style={s.white} />}
-            accessibilityRole="button"
-            accessibilityLabel={_(
-              msg({message: `New post`, context: 'action'}),
-            )}
-            accessibilityHint=""
-          />
-        )}
-      </View>
-    </NoSnippetWrapper>
+      {hasSession && (
+        <FAB
+          testID="composeFAB"
+          onPress={onPressCompose}
+          icon={<ComposeIcon2 strokeWidth={1.5} size={29} style={s.white} />}
+          accessibilityRole="button"
+          accessibilityLabel={_(msg({message: `New post`, context: 'action'}))}
+          accessibilityHint=""
+        />
+      )}
+    </View>
   )
 }
diff --git a/src/view/com/util/NoSnippetWrapper.tsx b/src/view/com/util/NoSnippetWrapper.tsx
deleted file mode 100644
index fcf658249..000000000
--- a/src/view/com/util/NoSnippetWrapper.tsx
+++ /dev/null
@@ -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}</>
-}