571 lines
21 KiB
Diff
571 lines
21 KiB
Diff
diff --git a/src/screens/Settings/AboutSettings.tsx b/src/screens/Settings/AboutSettings.tsx
|
|
index 6b8257b91..35202224b 100644
|
|
--- a/src/screens/Settings/AboutSettings.tsx
|
|
+++ b/src/screens/Settings/AboutSettings.tsx
|
|
@@ -80,7 +80,7 @@ export function AboutSettingsScreen({}: Props) {
|
|
<Layout.Content>
|
|
<SettingsList.Container>
|
|
<SettingsList.LinkItem
|
|
- to="https://bsky.social/about/support/tos"
|
|
+ to="https://syu.is/about/support/tos"
|
|
label={_(msg`Terms of Service`)}>
|
|
<SettingsList.ItemIcon icon={NewspaperIcon} />
|
|
<SettingsList.ItemText>
|
|
@@ -88,7 +88,7 @@ export function AboutSettingsScreen({}: Props) {
|
|
</SettingsList.ItemText>
|
|
</SettingsList.LinkItem>
|
|
<SettingsList.LinkItem
|
|
- to="https://bsky.social/about/support/privacy-policy"
|
|
+ to="https://syu.is/about/support/privacy-policy"
|
|
label={_(msg`Privacy Policy`)}>
|
|
<SettingsList.ItemIcon icon={NewspaperIcon} />
|
|
<SettingsList.ItemText>
|
|
diff --git a/src/screens/Takendown.tsx b/src/screens/Takendown.tsx
|
|
index dd319a4c6..0e80f956a 100644
|
|
--- a/src/screens/Takendown.tsx
|
|
+++ b/src/screens/Takendown.tsx
|
|
@@ -223,11 +223,11 @@ export function Takendown() {
|
|
<Trans>
|
|
Your account was found to be in violation of the{' '}
|
|
<InlineLinkText
|
|
- label={_(msg`Bluesky Social Terms of Service`)}
|
|
- to="https://bsky.social/about/support/tos"
|
|
+ label={_(msg`syu.is Terms of Service`)}
|
|
+ to="https://syu.is/about/support/tos"
|
|
style={[a.text_md, a.leading_normal]}
|
|
overridePresentation>
|
|
- Bluesky Social Terms of Service
|
|
+ syu.is Terms of Service
|
|
</InlineLinkText>
|
|
. You have been sent an email outlining the specific violation
|
|
and suspension period, if applicable. You can appeal this
|
|
diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx
|
|
index e058e2883..0f583c915 100644
|
|
--- a/src/view/screens/Home.tsx
|
|
+++ b/src/view/screens/Home.tsx
|
|
@@ -1,23 +1,16 @@
|
|
import React from 'react'
|
|
import {ActivityIndicator, StyleSheet} from 'react-native'
|
|
import {useFocusEffect} from '@react-navigation/native'
|
|
-
|
|
import {PROD_DEFAULT_FEED} from '#/lib/constants'
|
|
import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback'
|
|
import {useOTAUpdates} from '#/lib/hooks/useOTAUpdates'
|
|
import {useSetTitle} from '#/lib/hooks/useSetTitle'
|
|
import {useRequestNotificationsPermission} from '#/lib/notifications/notifications'
|
|
-import {
|
|
- type HomeTabNavigatorParams,
|
|
- type NativeStackScreenProps,
|
|
-} from '#/lib/routes/types'
|
|
+import {type HomeTabNavigatorParams, type NativeStackScreenProps} from '#/lib/routes/types'
|
|
import {logEvent} from '#/lib/statsig/statsig'
|
|
import {isWeb} from '#/platform/detection'
|
|
import {emitSoftReset} from '#/state/events'
|
|
-import {
|
|
- type SavedFeedSourceInfo,
|
|
- usePinnedFeedsInfos,
|
|
-} from '#/state/queries/feed'
|
|
+import {type SavedFeedSourceInfo, usePinnedFeedsInfos} from '#/state/queries/feed'
|
|
import {type FeedDescriptor, type FeedParams} from '#/state/queries/post-feed'
|
|
import {usePreferencesQuery} from '#/state/queries/preferences'
|
|
import {type UsePreferencesQueryResponse} from '#/state/queries/preferences/types'
|
|
@@ -27,11 +20,7 @@ import {useLoggedOutViewControls} from '#/state/shell/logged-out'
|
|
import {useSelectedFeed, useSetSelectedFeed} from '#/state/shell/selected-feed'
|
|
import {FeedPage} from '#/view/com/feeds/FeedPage'
|
|
import {HomeHeader} from '#/view/com/home/HomeHeader'
|
|
-import {
|
|
- Pager,
|
|
- type PagerRef,
|
|
- type RenderTabBarFnProps,
|
|
-} from '#/view/com/pager/Pager'
|
|
+import {Pager, type PagerRef, type RenderTabBarFnProps} from '#/view/com/pager/Pager'
|
|
import {CustomFeedEmptyState} from '#/view/com/posts/CustomFeedEmptyState'
|
|
import {FollowingEmptyState} from '#/view/com/posts/FollowingEmptyState'
|
|
import {FollowingEndOfFeed} from '#/view/com/posts/FollowingEndOfFeed'
|
|
@@ -39,97 +28,60 @@ import {NoFeedsPinned} from '#/screens/Home/NoFeedsPinned'
|
|
import * as Layout from '#/components/Layout'
|
|
import {useDemoMode} from '#/storage/hooks/demo-mode'
|
|
|
|
+const DEFAULT_PINNED_FEEDS = [{
|
|
+ feedDescriptor: 'following',
|
|
+ displayName: 'Following',
|
|
+ id: 'following',
|
|
+ type: 'feed',
|
|
+ savedFeed: undefined,
|
|
+ pinned: true,
|
|
+}]
|
|
+
|
|
type Props = NativeStackScreenProps<HomeTabNavigatorParams, 'Home' | 'Start'>
|
|
export function HomeScreen(props: Props) {
|
|
const {setShowLoggedOut} = useLoggedOutViewControls()
|
|
const {data: preferences} = usePreferencesQuery()
|
|
const {currentAccount} = useSession()
|
|
- const {data: pinnedFeedInfos, isLoading: isPinnedFeedsLoading} =
|
|
- usePinnedFeedsInfos()
|
|
+ const {data: pinnedFeedInfos} = usePinnedFeedsInfos()
|
|
+
|
|
+ const safePreferences = preferences || { feedViewPrefs: { lab_mergeFeedEnabled: false }, savedFeeds: [] } as any
|
|
+ const safePinnedFeedInfos = pinnedFeedInfos || DEFAULT_PINNED_FEEDS
|
|
|
|
React.useEffect(() => {
|
|
if (isWeb && !currentAccount) {
|
|
const getParams = new URLSearchParams(window.location.search)
|
|
const splash = getParams.get('splash')
|
|
- if (splash === 'true') {
|
|
- setShowLoggedOut(true)
|
|
- return
|
|
- }
|
|
+ if (splash === 'true') { setShowLoggedOut(true); return }
|
|
}
|
|
-
|
|
const params = props.route.params
|
|
- if (
|
|
- currentAccount &&
|
|
- props.route.name === 'Start' &&
|
|
- params?.name &&
|
|
- params?.rkey
|
|
- ) {
|
|
- props.navigation.navigate('StarterPack', {
|
|
- rkey: params.rkey,
|
|
- name: params.name,
|
|
- })
|
|
+ if (currentAccount && props.route.name === 'Start' && params?.name && params?.rkey) {
|
|
+ props.navigation.navigate('StarterPack', { rkey: params.rkey, name: params.name })
|
|
}
|
|
- }, [
|
|
- currentAccount,
|
|
- props.navigation,
|
|
- props.route.name,
|
|
- props.route.params,
|
|
- setShowLoggedOut,
|
|
- ])
|
|
+ }, [currentAccount, props.navigation, props.route.name, props.route.params, setShowLoggedOut])
|
|
|
|
- if (preferences && pinnedFeedInfos && !isPinnedFeedsLoading) {
|
|
- return (
|
|
- <Layout.Screen testID="HomeScreen">
|
|
- <HomeScreenReady
|
|
- {...props}
|
|
- preferences={preferences}
|
|
- pinnedFeedInfos={pinnedFeedInfos}
|
|
- />
|
|
- </Layout.Screen>
|
|
- )
|
|
- } else {
|
|
- return (
|
|
- <Layout.Screen>
|
|
- <Layout.Center style={styles.loading}>
|
|
- <ActivityIndicator size="large" />
|
|
- </Layout.Center>
|
|
- </Layout.Screen>
|
|
- )
|
|
- }
|
|
+ return (
|
|
+ <Layout.Screen testID="HomeScreen">
|
|
+ <HomeScreenReady {...props} preferences={safePreferences} pinnedFeedInfos={safePinnedFeedInfos as any} />
|
|
+ </Layout.Screen>
|
|
+ )
|
|
}
|
|
|
|
-function HomeScreenReady({
|
|
- preferences,
|
|
- pinnedFeedInfos,
|
|
-}: Props & {
|
|
- preferences: UsePreferencesQueryResponse
|
|
- pinnedFeedInfos: SavedFeedSourceInfo[]
|
|
-}) {
|
|
- const allFeeds = React.useMemo(
|
|
- () => pinnedFeedInfos.map(f => f.feedDescriptor),
|
|
- [pinnedFeedInfos],
|
|
- )
|
|
- const maybeRawSelectedFeed: FeedDescriptor | undefined =
|
|
- useSelectedFeed() ?? allFeeds[0]
|
|
+function HomeScreenReady({preferences, pinnedFeedInfos}: any) {
|
|
+ const allFeeds = React.useMemo(() => pinnedFeedInfos.map(f => f.feedDescriptor), [pinnedFeedInfos])
|
|
+ const maybeRawSelectedFeed = useSelectedFeed() ?? allFeeds[0]
|
|
const setSelectedFeed = useSetSelectedFeed()
|
|
const maybeFoundIndex = allFeeds.indexOf(maybeRawSelectedFeed)
|
|
const selectedIndex = Math.max(0, maybeFoundIndex)
|
|
- const maybeSelectedFeed: FeedDescriptor | undefined = allFeeds[selectedIndex]
|
|
+ const maybeSelectedFeed = allFeeds[selectedIndex]
|
|
const requestNotificationsPermission = useRequestNotificationsPermission()
|
|
-
|
|
+
|
|
useSetTitle(pinnedFeedInfos[selectedIndex]?.displayName)
|
|
useOTAUpdates()
|
|
-
|
|
- React.useEffect(() => {
|
|
- requestNotificationsPermission('Home')
|
|
- }, [requestNotificationsPermission])
|
|
+ React.useEffect(() => { requestNotificationsPermission('Home') }, [requestNotificationsPermission])
|
|
|
|
const pagerRef = React.useRef<PagerRef>(null)
|
|
const lastPagerReportedIndexRef = React.useRef(selectedIndex)
|
|
React.useLayoutEffect(() => {
|
|
- // Since the pager is not a controlled component, adjust it imperatively
|
|
- // if the selected index gets out of sync with what it last reported.
|
|
- // This is supposed to only happen on the web when you use the right nav.
|
|
if (selectedIndex !== lastPagerReportedIndexRef.current) {
|
|
lastPagerReportedIndexRef.current = selectedIndex
|
|
pagerRef.current?.setPage(selectedIndex)
|
|
@@ -138,205 +90,43 @@ function HomeScreenReady({
|
|
|
|
const {hasSession} = useSession()
|
|
const setMinimalShellMode = useSetMinimalShellMode()
|
|
- useFocusEffect(
|
|
- React.useCallback(() => {
|
|
- setMinimalShellMode(false)
|
|
- }, [setMinimalShellMode]),
|
|
- )
|
|
-
|
|
- useFocusEffect(
|
|
- useNonReactiveCallback(() => {
|
|
- if (maybeSelectedFeed) {
|
|
- logEvent('home:feedDisplayed', {
|
|
- index: selectedIndex,
|
|
- feedType: maybeSelectedFeed.split('|')[0],
|
|
- feedUrl: maybeSelectedFeed,
|
|
- reason: 'focus',
|
|
- })
|
|
- }
|
|
- }),
|
|
- )
|
|
-
|
|
- const onPageSelected = React.useCallback(
|
|
- (index: number) => {
|
|
- setMinimalShellMode(false)
|
|
- const maybeFeed = allFeeds[index]
|
|
-
|
|
- // Mutate the ref before setting state to avoid the imperative syncing effect
|
|
- // above from starting a loop on Android when swiping back and forth.
|
|
- lastPagerReportedIndexRef.current = index
|
|
- setSelectedFeed(maybeFeed)
|
|
-
|
|
- if (maybeFeed) {
|
|
- logEvent('home:feedDisplayed', {
|
|
- index,
|
|
- feedType: maybeFeed.split('|')[0],
|
|
- feedUrl: maybeFeed,
|
|
- })
|
|
- }
|
|
- },
|
|
- [setSelectedFeed, setMinimalShellMode, allFeeds],
|
|
- )
|
|
-
|
|
- const onPressSelected = React.useCallback(() => {
|
|
- emitSoftReset()
|
|
- }, [])
|
|
-
|
|
- const onPageScrollStateChanged = React.useCallback(
|
|
- (state: 'idle' | 'dragging' | 'settling') => {
|
|
- 'worklet'
|
|
- if (state === 'dragging') {
|
|
- setMinimalShellMode(false)
|
|
- }
|
|
- },
|
|
- [setMinimalShellMode],
|
|
- )
|
|
+ useFocusEffect(React.useCallback(() => { setMinimalShellMode(false) }, [setMinimalShellMode]))
|
|
+
|
|
+ const onPageSelected = React.useCallback((index) => {
|
|
+ setMinimalShellMode(false)
|
|
+ const maybeFeed = allFeeds[index]
|
|
+ lastPagerReportedIndexRef.current = index
|
|
+ setSelectedFeed(maybeFeed)
|
|
+ }, [setSelectedFeed, setMinimalShellMode, allFeeds])
|
|
+
|
|
+ const onPressSelected = React.useCallback(() => { emitSoftReset() }, [])
|
|
+ const onPageScrollStateChanged = React.useCallback((state) => {
|
|
+ 'worklet'
|
|
+ if (state === 'dragging') setMinimalShellMode(false)
|
|
+ }, [setMinimalShellMode])
|
|
|
|
const [demoMode] = useDemoMode()
|
|
-
|
|
- const renderTabBar = React.useCallback(
|
|
- (props: RenderTabBarFnProps) => {
|
|
- if (demoMode) {
|
|
- return (
|
|
- <HomeHeader
|
|
- key="FEEDS_TAB_BAR"
|
|
- {...props}
|
|
- testID="homeScreenFeedTabs"
|
|
- onPressSelected={onPressSelected}
|
|
- // @ts-ignore
|
|
- feeds={[{displayName: 'Following'}, {displayName: 'Discover'}]}
|
|
- />
|
|
- )
|
|
- }
|
|
- return (
|
|
- <HomeHeader
|
|
- key="FEEDS_TAB_BAR"
|
|
- {...props}
|
|
- testID="homeScreenFeedTabs"
|
|
- onPressSelected={onPressSelected}
|
|
- feeds={pinnedFeedInfos}
|
|
- />
|
|
- )
|
|
- },
|
|
- [onPressSelected, pinnedFeedInfos, demoMode],
|
|
- )
|
|
-
|
|
- const renderFollowingEmptyState = React.useCallback(() => {
|
|
- return <FollowingEmptyState />
|
|
- }, [])
|
|
-
|
|
- const renderCustomFeedEmptyState = React.useCallback(() => {
|
|
- return <CustomFeedEmptyState />
|
|
- }, [])
|
|
-
|
|
- const homeFeedParams = React.useMemo<FeedParams>(() => {
|
|
- return {
|
|
- mergeFeedEnabled: Boolean(preferences.feedViewPrefs.lab_mergeFeedEnabled),
|
|
- mergeFeedSources: preferences.feedViewPrefs.lab_mergeFeedEnabled
|
|
- ? preferences.savedFeeds
|
|
- .filter(f => f.type === 'feed' || f.type === 'list')
|
|
- .map(f => f.value)
|
|
- : [],
|
|
- }
|
|
- }, [preferences])
|
|
-
|
|
- if (demoMode) {
|
|
- return (
|
|
- <Pager
|
|
- ref={pagerRef}
|
|
- testID="homeScreen"
|
|
- onPageSelected={onPageSelected}
|
|
- onPageScrollStateChanged={onPageScrollStateChanged}
|
|
- renderTabBar={renderTabBar}
|
|
- initialPage={selectedIndex}>
|
|
- <FeedPage
|
|
- testID="demoFeedPage"
|
|
- isPageFocused
|
|
- isPageAdjacent={false}
|
|
- feed="demo"
|
|
- renderEmptyState={renderCustomFeedEmptyState}
|
|
- feedInfo={pinnedFeedInfos[0]}
|
|
- />
|
|
- <FeedPage
|
|
- testID="customFeedPage"
|
|
- isPageFocused
|
|
- isPageAdjacent={false}
|
|
- feed={`feedgen|${PROD_DEFAULT_FEED('whats-hot')}`}
|
|
- renderEmptyState={renderCustomFeedEmptyState}
|
|
- feedInfo={pinnedFeedInfos[0]}
|
|
- />
|
|
- </Pager>
|
|
- )
|
|
- }
|
|
-
|
|
- return hasSession ? (
|
|
- <Pager
|
|
- key={allFeeds.join(',')}
|
|
- ref={pagerRef}
|
|
- testID="homeScreen"
|
|
- initialPage={selectedIndex}
|
|
- onPageSelected={onPageSelected}
|
|
- onPageScrollStateChanged={onPageScrollStateChanged}
|
|
- renderTabBar={renderTabBar}>
|
|
- {pinnedFeedInfos.length ? (
|
|
- pinnedFeedInfos.map((feedInfo, index) => {
|
|
+ const renderTabBar = React.useCallback((props) => {
|
|
+ return <HomeHeader key="FEEDS_TAB_BAR" {...props} testID="homeScreenFeedTabs" onPressSelected={onPressSelected} feeds={pinnedFeedInfos} />
|
|
+ }, [onPressSelected, pinnedFeedInfos])
|
|
+
|
|
+ const renderFollowingEmptyState = React.useCallback(() => <FollowingEmptyState />, [])
|
|
+ const renderCustomFeedEmptyState = React.useCallback(() => <CustomFeedEmptyState />, [])
|
|
+
|
|
+ const homeFeedParams = React.useMemo(() => ({
|
|
+ mergeFeedEnabled: false, mergeFeedSources: []
|
|
+ }), [preferences])
|
|
+
|
|
+ return (
|
|
+ <Pager ref={pagerRef} testID="homeScreen" initialPage={selectedIndex} onPageSelected={onPageSelected} onPageScrollStateChanged={onPageScrollStateChanged} renderTabBar={renderTabBar}>
|
|
+ {pinnedFeedInfos.map((feedInfo, index) => {
|
|
const feed = feedInfo.feedDescriptor
|
|
if (feed === 'following') {
|
|
- return (
|
|
- <FeedPage
|
|
- key={feed}
|
|
- testID="followingFeedPage"
|
|
- isPageFocused={maybeSelectedFeed === feed}
|
|
- isPageAdjacent={Math.abs(selectedIndex - index) === 1}
|
|
- feed={feed}
|
|
- feedParams={homeFeedParams}
|
|
- renderEmptyState={renderFollowingEmptyState}
|
|
- renderEndOfFeed={FollowingEndOfFeed}
|
|
- feedInfo={feedInfo}
|
|
- />
|
|
- )
|
|
+ return <FeedPage key={feed} testID="followingFeedPage" isPageFocused={maybeSelectedFeed === feed} isPageAdjacent={Math.abs(selectedIndex - index) === 1} feed={feed} feedParams={homeFeedParams} renderEmptyState={renderFollowingEmptyState} renderEndOfFeed={FollowingEndOfFeed} feedInfo={feedInfo} />
|
|
}
|
|
- const savedFeedConfig = feedInfo.savedFeed
|
|
- return (
|
|
- <FeedPage
|
|
- key={feed}
|
|
- testID="customFeedPage"
|
|
- isPageFocused={maybeSelectedFeed === feed}
|
|
- isPageAdjacent={Math.abs(selectedIndex - index) === 1}
|
|
- feed={feed}
|
|
- renderEmptyState={renderCustomFeedEmptyState}
|
|
- savedFeedConfig={savedFeedConfig}
|
|
- feedInfo={feedInfo}
|
|
- />
|
|
- )
|
|
- })
|
|
- ) : (
|
|
- <NoFeedsPinned preferences={preferences} />
|
|
- )}
|
|
- </Pager>
|
|
- ) : (
|
|
- <Pager
|
|
- testID="homeScreen"
|
|
- onPageSelected={onPageSelected}
|
|
- onPageScrollStateChanged={onPageScrollStateChanged}
|
|
- renderTabBar={renderTabBar}>
|
|
- <FeedPage
|
|
- testID="customFeedPage"
|
|
- isPageFocused
|
|
- isPageAdjacent={false}
|
|
- feed={`feedgen|${PROD_DEFAULT_FEED('whats-hot')}`}
|
|
- renderEmptyState={renderCustomFeedEmptyState}
|
|
- feedInfo={pinnedFeedInfos[0]}
|
|
- />
|
|
+ return <FeedPage key={feed} testID="customFeedPage" isPageFocused={maybeSelectedFeed === feed} isPageAdjacent={Math.abs(selectedIndex - index) === 1} feed={feed} renderEmptyState={renderCustomFeedEmptyState} savedFeedConfig={feedInfo.savedFeed} feedInfo={feedInfo} />
|
|
+ })}
|
|
</Pager>
|
|
)
|
|
}
|
|
-
|
|
-const styles = StyleSheet.create({
|
|
- loading: {
|
|
- height: '100%',
|
|
- alignContent: 'center',
|
|
- justifyContent: 'center',
|
|
- paddingBottom: 100,
|
|
- },
|
|
-})
|
|
+const styles = StyleSheet.create({ loading: { height: '100%', alignContent: 'center', justifyContent: 'center', paddingBottom: 100 } })
|
|
diff --git a/src/view/screens/PrivacyPolicy.tsx b/src/view/screens/PrivacyPolicy.tsx
|
|
index a89eaadc4..228af4966 100644
|
|
--- a/src/view/screens/PrivacyPolicy.tsx
|
|
+++ b/src/view/screens/PrivacyPolicy.tsx
|
|
@@ -1,52 +1,13 @@
|
|
import React from 'react'
|
|
-import {View} from 'react-native'
|
|
-import {msg, Trans} from '@lingui/macro'
|
|
-import {useLingui} from '@lingui/react'
|
|
-import {useFocusEffect} from '@react-navigation/native'
|
|
-
|
|
-import {usePalette} from '#/lib/hooks/usePalette'
|
|
-import {
|
|
- type CommonNavigatorParams,
|
|
- type NativeStackScreenProps,
|
|
-} from '#/lib/routes/types'
|
|
-import {s} from '#/lib/styles'
|
|
-import {useSetMinimalShellMode} from '#/state/shell'
|
|
-import {TextLink} from '#/view/com/util/Link'
|
|
-import {Text} from '#/view/com/util/text/Text'
|
|
-import {ScrollView} from '#/view/com/util/Views'
|
|
+import { WebView } from 'react-native-webview'
|
|
import * as Layout from '#/components/Layout'
|
|
-import {ViewHeader} from '../com/util/ViewHeader'
|
|
-
|
|
-type Props = NativeStackScreenProps<CommonNavigatorParams, 'PrivacyPolicy'>
|
|
-export const PrivacyPolicyScreen = (_props: Props) => {
|
|
- const pal = usePalette('default')
|
|
- const {_} = useLingui()
|
|
- const setMinimalShellMode = useSetMinimalShellMode()
|
|
-
|
|
- useFocusEffect(
|
|
- React.useCallback(() => {
|
|
- setMinimalShellMode(false)
|
|
- }, [setMinimalShellMode]),
|
|
- )
|
|
+import {useSetTitle} from '#/lib/hooks/useSetTitle'
|
|
|
|
+export function PrivacyPolicyScreen() {
|
|
+ useSetTitle('Privacy Policy')
|
|
return (
|
|
<Layout.Screen>
|
|
- <ViewHeader title={_(msg`Privacy Policy`)} />
|
|
- <ScrollView style={[s.hContentRegion, pal.view]}>
|
|
- <View style={[s.p20]}>
|
|
- <Text style={pal.text}>
|
|
- <Trans>
|
|
- The Privacy Policy has been moved to{' '}
|
|
- <TextLink
|
|
- style={pal.link}
|
|
- href="https://bsky.social/about/support/privacy-policy"
|
|
- text="bsky.social/about/support/privacy-policy"
|
|
- />
|
|
- </Trans>
|
|
- </Text>
|
|
- </View>
|
|
- <View style={s.footerSpacer} />
|
|
- </ScrollView>
|
|
+ <WebView source={{ uri: 'https://syu.is/about/support/privacy-policy' }} style={{ flex: 1 }} />
|
|
</Layout.Screen>
|
|
)
|
|
}
|
|
diff --git a/src/view/screens/TermsOfService.tsx b/src/view/screens/TermsOfService.tsx
|
|
index d843c713c..c0b34c886 100644
|
|
--- a/src/view/screens/TermsOfService.tsx
|
|
+++ b/src/view/screens/TermsOfService.tsx
|
|
@@ -1,50 +1,13 @@
|
|
import React from 'react'
|
|
-import {View} from 'react-native'
|
|
-import {msg, Trans} from '@lingui/macro'
|
|
-import {useLingui} from '@lingui/react'
|
|
-import {useFocusEffect} from '@react-navigation/native'
|
|
-
|
|
-import {usePalette} from '#/lib/hooks/usePalette'
|
|
-import {
|
|
- type CommonNavigatorParams,
|
|
- type NativeStackScreenProps,
|
|
-} from '#/lib/routes/types'
|
|
-import {s} from '#/lib/styles'
|
|
-import {useSetMinimalShellMode} from '#/state/shell'
|
|
-import {TextLink} from '#/view/com/util/Link'
|
|
-import {Text} from '#/view/com/util/text/Text'
|
|
-import {ScrollView} from '#/view/com/util/Views'
|
|
+import { WebView } from 'react-native-webview'
|
|
import * as Layout from '#/components/Layout'
|
|
-import {ViewHeader} from '../com/util/ViewHeader'
|
|
-
|
|
-type Props = NativeStackScreenProps<CommonNavigatorParams, 'TermsOfService'>
|
|
-export const TermsOfServiceScreen = (_props: Props) => {
|
|
- const pal = usePalette('default')
|
|
- const setMinimalShellMode = useSetMinimalShellMode()
|
|
- const {_} = useLingui()
|
|
-
|
|
- useFocusEffect(
|
|
- React.useCallback(() => {
|
|
- setMinimalShellMode(false)
|
|
- }, [setMinimalShellMode]),
|
|
- )
|
|
+import {useSetTitle} from '#/lib/hooks/useSetTitle'
|
|
|
|
+export function TermsOfServiceScreen() {
|
|
+ useSetTitle('Terms of Service')
|
|
return (
|
|
<Layout.Screen>
|
|
- <ViewHeader title={_(msg`Terms of Service`)} />
|
|
- <ScrollView style={[s.hContentRegion, pal.view]}>
|
|
- <View style={[s.p20]}>
|
|
- <Text style={pal.text}>
|
|
- <Trans>The Terms of Service have been moved to</Trans>{' '}
|
|
- <TextLink
|
|
- style={pal.link}
|
|
- href="https://bsky.social/about/support/tos"
|
|
- text="bsky.social/about/support/tos"
|
|
- />
|
|
- </Text>
|
|
- </View>
|
|
- <View style={s.footerSpacer} />
|
|
- </ScrollView>
|
|
+ <WebView source={{ uri: 'https://syu.is/about/support/tos' }} style={{ flex: 1 }} />
|
|
</Layout.Screen>
|
|
)
|
|
}
|