about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorLogan Rosen <loganrosen@gmail.com>2023-06-22 12:40:32 -0400
committerGitHub <noreply@github.com>2023-06-22 12:40:32 -0400
commit9b19a95e638b2a5379560b5ffb27c423ad9a2e4e (patch)
tree90f35e751116815beffd587901415a9a94ca7eb7 /src
parent180697b66b038459236a023c712709651cba48c1 (diff)
downloadvoidsky-9b19a95e638b2a5379560b5ffb27c423ad9a2e4e.tar.zst
Bump @types/react to ^18 and adjust types (#889)
Diffstat (limited to 'src')
-rw-r--r--src/Navigation.tsx13
-rw-r--r--src/lib/ThemeContext.tsx3
-rw-r--r--src/state/models/feeds/posts.ts26
-rw-r--r--src/view/com/composer/Composer.tsx4
-rw-r--r--src/view/com/post-thread/PostThreadItem.tsx4
-rw-r--r--src/view/com/post/Post.tsx3
-rw-r--r--src/view/com/posts/FeedItem.tsx4
-rw-r--r--src/view/com/profile/ProfileCard.tsx2
-rw-r--r--src/view/com/util/ViewSelector.tsx2
-rw-r--r--src/view/com/util/forms/Button.tsx11
-rw-r--r--src/view/screens/DiscoverFeeds.tsx3
-rw-r--r--src/view/screens/SavedFeeds.tsx2
12 files changed, 55 insertions, 22 deletions
diff --git a/src/Navigation.tsx b/src/Navigation.tsx
index 77e7cfa0b..640b771d4 100644
--- a/src/Navigation.tsx
+++ b/src/Navigation.tsx
@@ -10,7 +10,10 @@ import {
   DarkTheme,
 } from '@react-navigation/native'
 import {createNativeStackNavigator} from '@react-navigation/native-stack'
-import {createBottomTabNavigator} from '@react-navigation/bottom-tabs'
+import {
+  BottomTabBarProps,
+  createBottomTabNavigator,
+} from '@react-navigation/bottom-tabs'
 import {
   HomeTabNavigatorParams,
   SearchTabNavigatorParams,
@@ -62,6 +65,7 @@ import {ModerationBlockedAccounts} from 'view/screens/ModerationBlockedAccounts'
 import {SavedFeeds} from 'view/screens/SavedFeeds'
 import {getRoutingInstrumentation} from 'lib/sentry'
 import {bskyTitle} from 'lib/strings/headings'
+import {JSX} from 'react/jsx-runtime'
 
 const navigationRef = createNavigationContainerRef<AllNavigatorParams>()
 
@@ -220,7 +224,12 @@ function commonScreens(Stack: typeof HomeTab, unreadCountLabel?: string) {
  * in 3 distinct tab-stacks with a different root screen on each.
  */
 function TabsNavigator() {
-  const tabBar = React.useCallback(props => <BottomBar {...props} />, [])
+  const tabBar = React.useCallback(
+    (props: JSX.IntrinsicAttributes & BottomTabBarProps) => (
+      <BottomBar {...props} />
+    ),
+    [],
+  )
   return (
     <Tab.Navigator
       initialRouteName="HomeTab"
diff --git a/src/lib/ThemeContext.tsx b/src/lib/ThemeContext.tsx
index e68ba5246..2f2f268da 100644
--- a/src/lib/ThemeContext.tsx
+++ b/src/lib/ThemeContext.tsx
@@ -1,4 +1,4 @@
-import React, {createContext, useContext, useMemo} from 'react'
+import React, {ReactNode, createContext, useContext, useMemo} from 'react'
 import {TextStyle, useColorScheme, ViewStyle} from 'react-native'
 import {darkTheme, defaultTheme} from './themes'
 
@@ -78,6 +78,7 @@ export interface Theme {
 }
 
 export interface ThemeProviderProps {
+  children?: ReactNode
   theme?: 'light' | 'dark' | 'system'
 }
 
diff --git a/src/state/models/feeds/posts.ts b/src/state/models/feeds/posts.ts
index 594143bf2..2c6f89c35 100644
--- a/src/state/models/feeds/posts.ts
+++ b/src/state/models/feeds/posts.ts
@@ -130,13 +130,25 @@ export class PostsFeedModel {
       ]
     }
     if (this.feedType === 'home') {
-      return [
-        areRepostsEnabled && FeedTuner.dedupReposts,
-        !areRepostsEnabled && FeedTuner.removeReposts,
-        areRepliesEnabled && FeedTuner.likedRepliesOnly({repliesThreshold}),
-        !areRepliesEnabled && FeedTuner.removeReplies,
-        !areQuotePostsEnabled && FeedTuner.removeQuotePosts,
-      ].filter(Boolean)
+      const feedTuners = []
+
+      if (areRepostsEnabled) {
+        feedTuners.push(FeedTuner.dedupReposts)
+      } else {
+        feedTuners.push(FeedTuner.removeReposts)
+      }
+
+      if (areRepliesEnabled) {
+        feedTuners.push(FeedTuner.likedRepliesOnly({repliesThreshold}))
+      } else {
+        feedTuners.push(FeedTuner.removeReplies)
+      }
+
+      if (!areQuotePostsEnabled) {
+        feedTuners.push(FeedTuner.removeQuotePosts)
+      }
+
+      return feedTuners
     }
     return []
   }
diff --git a/src/view/com/composer/Composer.tsx b/src/view/com/composer/Composer.tsx
index 37569fbec..f88cf4bf0 100644
--- a/src/view/com/composer/Composer.tsx
+++ b/src/view/com/composer/Composer.tsx
@@ -133,8 +133,8 @@ export const ComposePost = observer(function ComposePost({
   )
 
   const onPressPublish = useCallback(
-    async rt => {
-      if (isProcessing || rt.graphemeLength_ > MAX_GRAPHEME_LENGTH) {
+    async (rt: RichText) => {
+      if (isProcessing || rt.graphemeLength > MAX_GRAPHEME_LENGTH) {
         return
       }
 
diff --git a/src/view/com/post-thread/PostThreadItem.tsx b/src/view/com/post-thread/PostThreadItem.tsx
index 8ccdfdb06..647468401 100644
--- a/src/view/com/post-thread/PostThreadItem.tsx
+++ b/src/view/com/post-thread/PostThreadItem.tsx
@@ -1,6 +1,6 @@
 import React, {useCallback, useMemo} from 'react'
 import {observer} from 'mobx-react-lite'
-import {Linking, StyleSheet, View} from 'react-native'
+import {AccessibilityActionEvent, Linking, StyleSheet, View} from 'react-native'
 import Clipboard from '@react-native-clipboard/clipboard'
 import {AtUri} from '@atproto/api'
 import {
@@ -152,7 +152,7 @@ export const PostThreadItem = observer(function PostThreadItem({
   )
 
   const onAccessibilityAction = useCallback(
-    event => {
+    (event: AccessibilityActionEvent) => {
       switch (event.nativeEvent.actionName) {
         case 'like':
           onPressToggleLike()
diff --git a/src/view/com/post/Post.tsx b/src/view/com/post/Post.tsx
index d37c43a3d..b9d146dee 100644
--- a/src/view/com/post/Post.tsx
+++ b/src/view/com/post/Post.tsx
@@ -1,5 +1,6 @@
 import React, {useCallback, useEffect, useMemo, useState} from 'react'
 import {
+  AccessibilityActionEvent,
   ActivityIndicator,
   Linking,
   StyleProp,
@@ -223,7 +224,7 @@ const PostLoaded = observer(
     )
 
     const onAccessibilityAction = useCallback(
-      event => {
+      (event: AccessibilityActionEvent) => {
         switch (event.nativeEvent.actionName) {
           case 'like':
             onPressToggleLike()
diff --git a/src/view/com/posts/FeedItem.tsx b/src/view/com/posts/FeedItem.tsx
index 18c32b899..d83e64073 100644
--- a/src/view/com/posts/FeedItem.tsx
+++ b/src/view/com/posts/FeedItem.tsx
@@ -1,6 +1,6 @@
 import React, {useCallback, useMemo, useState} from 'react'
 import {observer} from 'mobx-react-lite'
-import {Linking, StyleSheet, View} from 'react-native'
+import {AccessibilityActionEvent, Linking, StyleSheet, View} from 'react-native'
 import Clipboard from '@react-native-clipboard/clipboard'
 import {AtUri} from '@atproto/api'
 import {
@@ -173,7 +173,7 @@ export const FeedItem = observer(function ({
   )
 
   const onAccessibilityAction = useCallback(
-    event => {
+    (event: AccessibilityActionEvent) => {
       switch (event.nativeEvent.actionName) {
         case 'like':
           onPressToggleLike()
diff --git a/src/view/com/profile/ProfileCard.tsx b/src/view/com/profile/ProfileCard.tsx
index 50b9f199c..2dfc7ad30 100644
--- a/src/view/com/profile/ProfileCard.tsx
+++ b/src/view/com/profile/ProfileCard.tsx
@@ -100,7 +100,7 @@ export const ProfileCard = observer(
         {profile.description ? (
           <View style={styles.details}>
             <Text style={pal.text} numberOfLines={4}>
-              {profile.description}
+              {profile.description as string}
             </Text>
           </View>
         ) : undefined}
diff --git a/src/view/com/util/ViewSelector.tsx b/src/view/com/util/ViewSelector.tsx
index 705178a8a..e2f47ba89 100644
--- a/src/view/com/util/ViewSelector.tsx
+++ b/src/view/com/util/ViewSelector.tsx
@@ -59,7 +59,7 @@ export const ViewSelector = React.forwardRef<
     // events
     // =
 
-    const keyExtractor = React.useCallback(item => item._reactKey, [])
+    const keyExtractor = React.useCallback((item: any) => item._reactKey, [])
 
     const onPressSelection = React.useCallback(
       (index: number) => setSelectedIndex(clamp(index, 0, sections.length)),
diff --git a/src/view/com/util/forms/Button.tsx b/src/view/com/util/forms/Button.tsx
index 6a5f19f99..8049d2243 100644
--- a/src/view/com/util/forms/Button.tsx
+++ b/src/view/com/util/forms/Button.tsx
@@ -6,6 +6,7 @@ import {
   TextStyle,
   Pressable,
   ViewStyle,
+  PressableStateCallbackType,
 } from 'react-native'
 import {Text} from '../text/Text'
 import {useTheme} from 'lib/ThemeContext'
@@ -26,6 +27,14 @@ export type ButtonType =
   | 'secondary-light'
   | 'default-light'
 
+// Augment type for react-native-web (see https://github.com/necolas/react-native-web/issues/1684#issuecomment-766451866)
+declare module 'react-native' {
+  interface PressableStateCallbackType {
+    hovered?: boolean
+    focused?: boolean
+  }
+}
+
 // TODO: Enforce that button always has a label
 export function Button({
   type = 'primary',
@@ -139,7 +148,7 @@ export function Button({
   )
 
   const getStyle = React.useCallback(
-    state => {
+    (state: PressableStateCallbackType) => {
       const arr = [typeOuterStyle, styles.outer, style]
       if (state.pressed) {
         arr.push({opacity: 0.6})
diff --git a/src/view/screens/DiscoverFeeds.tsx b/src/view/screens/DiscoverFeeds.tsx
index 98f164a61..6b0f6b7fe 100644
--- a/src/view/screens/DiscoverFeeds.tsx
+++ b/src/view/screens/DiscoverFeeds.tsx
@@ -13,6 +13,7 @@ import {Text} from 'view/com/util/text/Text'
 import {isDesktopWeb} from 'platform/detection'
 import {usePalette} from 'lib/hooks/usePalette'
 import {s} from 'lib/styles'
+import {CustomFeedModel} from 'state/models/feeds/custom-feed'
 
 type Props = NativeStackScreenProps<CommonNavigatorParams, 'DiscoverFeeds'>
 export const DiscoverFeedsScreen = withAuthRequired(
@@ -51,7 +52,7 @@ export const DiscoverFeedsScreen = withAuthRequired(
     }, [pal, feeds.isLoading])
 
     const renderItem = React.useCallback(
-      ({item}) => (
+      ({item}: {item: CustomFeedModel}) => (
         <CustomFeed
           key={item.data.uri}
           item={item}
diff --git a/src/view/screens/SavedFeeds.tsx b/src/view/screens/SavedFeeds.tsx
index ac38a760b..0b9e55e0c 100644
--- a/src/view/screens/SavedFeeds.tsx
+++ b/src/view/screens/SavedFeeds.tsx
@@ -100,7 +100,7 @@ export const SavedFeeds = withAuthRequired(
     const onRefresh = useCallback(() => savedFeeds.refresh(), [savedFeeds])
 
     const onDragEnd = useCallback(
-      async ({data}) => {
+      async ({data}: {data: CustomFeedModel[]}) => {
         try {
           await savedFeeds.reorderPinnedFeeds(data)
         } catch (e) {