This commit is contained in:
Zhiyuan Zheng 2020-12-21 23:30:26 +01:00
parent e77de4e9c0
commit a1a959995e
No known key found for this signature in database
GPG Key ID: 078A93AB607D85E0
6 changed files with 44 additions and 66 deletions

45
App.tsx
View File

@ -1,6 +1,5 @@
import * as SplashScreen from 'expo-splash-screen' import * as SplashScreen from 'expo-splash-screen'
import React, { useEffect, useState } from 'react' import React, { useEffect, useState } from 'react'
import { AppearanceProvider } from 'react-native-appearance'
import { QueryClient, QueryClientProvider } from 'react-query' import { QueryClient, QueryClientProvider } from 'react-query'
import { Provider } from 'react-redux' import { Provider } from 'react-redux'
import { PersistGate } from 'redux-persist/integration/react' import { PersistGate } from 'redux-persist/integration/react'
@ -46,29 +45,27 @@ const App: React.FC = () => {
}, [appLoaded]) }, [appLoaded])
return ( return (
<AppearanceProvider> <QueryClientProvider client={queryClient}>
<QueryClientProvider client={queryClient}> <Provider store={store}>
<Provider store={store}> <PersistGate
<PersistGate persistor={persistor}
persistor={persistor} onBeforeLift={() => setAppLoaded(true)}
onBeforeLift={() => setAppLoaded(true)} >
> {bootstrapped => {
{bootstrapped => { if (bootstrapped) {
if (bootstrapped) { require('@root/i18n/i18n')
require('@root/i18n/i18n') return (
return ( <ThemeManager>
<ThemeManager> <Index />
<Index /> </ThemeManager>
</ThemeManager> )
) } else {
} else { return null
return null }
} }}
}} </PersistGate>
</PersistGate> </Provider>
</Provider> </QueryClientProvider>
</QueryClientProvider>
</AppearanceProvider>
) )
} }

View File

@ -36,7 +36,6 @@
"react-dom": "16.13.1", "react-dom": "16.13.1",
"react-i18next": "^11.8.4", "react-i18next": "^11.8.4",
"react-native": "https://github.com/expo/react-native/archive/sdk-40.0.0.tar.gz", "react-native": "https://github.com/expo/react-native/archive/sdk-40.0.0.tar.gz",
"react-native-appearance": "~0.3.3",
"react-native-collapsible": "^1.5.3", "react-native-collapsible": "^1.5.3",
"react-native-gesture-handler": "~1.8.0", "react-native-gesture-handler": "~1.8.0",
"react-native-htmlview": "^0.16.0", "react-native-htmlview": "^0.16.0",
@ -72,4 +71,4 @@
"typescript": "~4.0.0" "typescript": "~4.0.0"
}, },
"private": true "private": true
} }

View File

@ -1,4 +1,4 @@
import React, { useCallback, useEffect, useState } from 'react' import React, { useCallback, useState } from 'react'
import { Dimensions, StyleSheet, View } from 'react-native' import { Dimensions, StyleSheet, View } from 'react-native'
import SegmentedControl from '@react-native-community/segmented-control' import SegmentedControl from '@react-native-community/segmented-control'
import { createNativeStackNavigator } from 'react-native-screens/native-stack' import { createNativeStackNavigator } from 'react-native-screens/native-stack'
@ -26,12 +26,6 @@ const Timelines: React.FC<Props> = ({ name, content }) => {
const localRegistered = useSelector(getLocalUrl) const localRegistered = useSelector(getLocalUrl)
const publicDomain = useSelector(getRemoteUrl) const publicDomain = useSelector(getRemoteUrl)
const [segment, setSegment] = useState(0) const [segment, setSegment] = useState(0)
const [renderHeader, setRenderHeader] = useState(false)
useEffect(() => {
const nbr = setTimeout(() => setRenderHeader(true), 50)
return
}, [])
const onPressSearch = useCallback(() => { const onPressSearch = useCallback(() => {
navigation.navigate(getCurrentTab(navigation), { navigation.navigate(getCurrentTab(navigation), {
@ -40,9 +34,7 @@ const Timelines: React.FC<Props> = ({ name, content }) => {
}, []) }, [])
const routes = content const routes = content
.filter(p => .filter(p => (localRegistered ? true : p.page === 'RemotePublic'))
localRegistered ? p : p.page === 'RemotePublic' ? p : undefined
)
.map(p => ({ key: p.page })) .map(p => ({ key: p.page }))
const renderScene = ({ const renderScene = ({
@ -71,7 +63,7 @@ const Timelines: React.FC<Props> = ({ name, content }) => {
initialLayout={{ width: Dimensions.get('window').width }} initialLayout={{ width: Dimensions.get('window').width }}
/> />
), ),
[segment] [segment, localRegistered]
) )
return ( return (
@ -80,24 +72,23 @@ const Timelines: React.FC<Props> = ({ name, content }) => {
name={name} name={name}
options={{ options={{
headerTitle: name === 'Screen-Public-Root' ? publicDomain : '', headerTitle: name === 'Screen-Public-Root' ? publicDomain : '',
...(renderHeader && ...(localRegistered && {
localRegistered && { headerCenter: () => (
headerCenter: () => ( <View style={styles.segmentsContainer}>
<View style={styles.segmentsContainer}> <SegmentedControl
<SegmentedControl appearance={mode}
appearance={mode} values={[content[0].title, content[1].title]}
values={[content[0].title, content[1].title]} selectedIndex={segment}
selectedIndex={segment} onChange={({ nativeEvent }) =>
onChange={({ nativeEvent }) => setSegment(nativeEvent.selectedSegmentIndex)
setSegment(nativeEvent.selectedSegmentIndex) }
} />
/> </View>
</View> ),
), headerRight: () => (
headerRight: () => ( <HeaderRight icon='search' onPress={onPressSearch} />
<HeaderRight icon='search' onPress={onPressSearch} /> )
) })
})
}} }}
> >
{screenComponent} {screenComponent}

View File

@ -107,7 +107,7 @@ const Login: React.FC = () => {
const onChangeText = useCallback( const onChangeText = useCallback(
debounce( debounce(
text => { text => {
setInstanceDomain(text) setInstanceDomain(text.replace(/^http(s)?\:\/\//i, ''))
setApplicationData(undefined) setApplicationData(undefined)
}, },
1000, 1000,

View File

@ -1,5 +1,5 @@
import React, { createContext, useContext, useEffect, useState } from 'react' import React, { createContext, useContext, useEffect, useState } from 'react'
import { useColorScheme } from 'react-native-appearance' import { useColorScheme } from 'react-native'
import { useSelector } from 'react-redux' import { useSelector } from 'react-redux'
import { ColorDefinitions, getTheme } from '@utils/styles/themes' import { ColorDefinitions, getTheme } from '@utils/styles/themes'
import { getSettingsTheme } from '@utils/slices/settingsSlice' import { getSettingsTheme } from '@utils/slices/settingsSlice'

View File

@ -5225,15 +5225,6 @@ react-is@^17.0.1:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339"
integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA==
react-native-appearance@~0.3.3:
version "0.3.4"
resolved "https://registry.yarnpkg.com/react-native-appearance/-/react-native-appearance-0.3.4.tgz#2cbcbc5142cdc1898c116684f519b16c879cbec2"
integrity sha512-Vz3zdJbAEiMDwuw6wH98TT1WVfBvWjvANutYtkIbl16KGRCigtSgt6IIiLsF3/TSS3y3FtHhWDelFeGw/rtuig==
dependencies:
fbemitter "^2.1.1"
invariant "^2.2.4"
use-subscription "^1.0.0"
react-native-collapsible@^1.5.3: react-native-collapsible@^1.5.3:
version "1.5.3" version "1.5.3"
resolved "https://registry.yarnpkg.com/react-native-collapsible/-/react-native-collapsible-1.5.3.tgz#d6bc7274ae8f40f7688cca23ededa263e6c81c63" resolved "https://registry.yarnpkg.com/react-native-collapsible/-/react-native-collapsible-1.5.3.tgz#d6bc7274ae8f40f7688cca23ededa263e6c81c63"