tooot/src/screens/Tabs/Me/Root.tsx

62 lines
2.0 KiB
TypeScript
Raw Normal View History

2021-01-30 01:29:15 +01:00
import ComponentInstance from '@components/Instance'
import { useScrollToTop } from '@react-navigation/native'
2021-01-30 01:29:15 +01:00
import Collections from '@screens/Tabs/Me/Root/Collections'
import Logout from '@screens/Tabs/Me/Root/Logout'
import MyInfo from '@screens/Tabs/Me/Root/MyInfo'
import Settings from '@screens/Tabs/Me/Root/Settings'
import AccountNav from '@screens/Tabs/Shared/Account/Nav'
import AccountContext from '@screens/Tabs/Shared/Account/utils/createContext'
import accountInitialState from '@screens/Tabs/Shared/Account/utils/initialState'
import accountReducer from '@screens/Tabs/Shared/Account/utils/reducer'
2021-02-20 19:12:44 +01:00
import { getInstanceActive } from '@utils/slices/instancesSlice'
2021-01-30 01:29:15 +01:00
import React, { useReducer, useRef, useState } from 'react'
import Animated, {
useAnimatedScrollHandler,
useSharedValue
} from 'react-native-reanimated'
2021-01-30 01:29:15 +01:00
import { useSelector } from 'react-redux'
2020-11-21 13:19:05 +01:00
2021-01-30 01:29:15 +01:00
const ScreenMeRoot: React.FC = () => {
2021-02-20 19:12:44 +01:00
const instanceActive = useSelector(getInstanceActive)
2020-11-21 13:19:05 +01:00
const scrollRef = useRef<Animated.ScrollView>(null)
2020-12-13 23:02:54 +01:00
useScrollToTop(scrollRef)
2020-12-18 00:00:45 +01:00
const [data, setData] = useState<Mastodon.Account>()
const [accountState, accountDispatch] = useReducer(
accountReducer,
accountInitialState
)
const scrollY = useSharedValue(0)
const onScroll = useAnimatedScrollHandler(event => {
scrollY.value = event.contentOffset.y
})
2020-11-22 00:46:23 +01:00
return (
<AccountContext.Provider value={{ accountState, accountDispatch }}>
2021-02-20 19:12:44 +01:00
{instanceActive !== -1 && data ? (
<AccountNav scrollY={scrollY} account={data} />
2020-12-18 00:00:45 +01:00
) : null}
<Animated.ScrollView
2020-12-18 00:00:45 +01:00
ref={scrollRef}
keyboardShouldPersistTaps='handled'
onScroll={onScroll}
scrollEventThrottle={16}
2020-12-18 00:00:45 +01:00
>
2021-02-20 19:12:44 +01:00
{instanceActive !== -1 ? (
2021-01-07 19:13:09 +01:00
<MyInfo setData={setData} />
) : (
2021-02-09 01:16:12 +01:00
<ComponentInstance />
2021-01-07 19:13:09 +01:00
)}
2021-02-20 19:12:44 +01:00
{instanceActive !== -1 ? <Collections /> : null}
2020-12-18 00:00:45 +01:00
<Settings />
2021-02-20 19:12:44 +01:00
{instanceActive !== -1 ? <Logout /> : null}
</Animated.ScrollView>
</AccountContext.Provider>
2020-11-22 00:46:23 +01:00
)
2020-11-21 13:19:05 +01:00
}
export default ScreenMeRoot