1
0
mirror of https://github.com/tooot-app/app synced 2025-06-05 22:19:13 +02:00
This commit is contained in:
xmflsct
2022-12-21 14:42:44 +01:00
parent 852095f5cf
commit b36863337e
5 changed files with 12 additions and 99 deletions

View File

@ -254,9 +254,6 @@
"content_true": "Enabled", "content_true": "Enabled",
"content_false": "Disabled" "content_false": "Disabled"
}, },
"update": {
"title": "Update to latest version"
},
"logout": { "logout": {
"button": "Log out", "button": "Log out",
"alert": { "alert": {

View File

@ -2,13 +2,11 @@ import GracefullyImage from '@components/GracefullyImage'
import haptics from '@components/haptics' import haptics from '@components/haptics'
import Icon from '@components/Icon' import Icon from '@components/Icon'
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs' import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'
import { useAppDispatch } from '@root/store'
import { RootStackScreenProps, ScreenTabsStackParamList } from '@utils/navigation/navigators' import { RootStackScreenProps, ScreenTabsStackParamList } from '@utils/navigation/navigators'
import { getVersionUpdate, retrieveVersionLatest } from '@utils/slices/appSlice'
import { getPreviousTab } from '@utils/slices/contextsSlice' import { getPreviousTab } from '@utils/slices/contextsSlice'
import { getInstanceAccount, getInstanceActive } from '@utils/slices/instancesSlice' import { getInstanceAccount, getInstanceActive } from '@utils/slices/instancesSlice'
import { useTheme } from '@utils/styles/ThemeManager' import { useTheme } from '@utils/styles/ThemeManager'
import React, { useCallback, useEffect, useMemo } from 'react' import React, { useCallback, useMemo } from 'react'
import { Platform } from 'react-native' import { Platform } from 'react-native'
import { useSelector } from 'react-redux' import { useSelector } from 'react-redux'
import TabLocal from './Tabs/Local' import TabLocal from './Tabs/Local'
@ -55,17 +53,6 @@ const ScreenTabs = React.memo(
const previousTab = useSelector(getPreviousTab, () => true) const previousTab = useSelector(getPreviousTab, () => true)
const versionUpdate = useSelector(getVersionUpdate)
const dispatch = useAppDispatch()
useEffect(() => {
dispatch(retrieveVersionLatest())
}, [])
const tabMeOptions = useMemo(() => {
if (versionUpdate) {
return { tabBarBadge: 1 }
}
}, [versionUpdate])
return ( return (
<Tab.Navigator <Tab.Navigator
initialRouteName={instanceActive !== -1 ? previousTab : 'Tab-Me'} initialRouteName={instanceActive !== -1 ? previousTab : 'Tab-Me'}
@ -121,12 +108,7 @@ const ScreenTabs = React.memo(
<Tab.Screen name='Tab-Public' component={TabPublic} /> <Tab.Screen name='Tab-Public' component={TabPublic} />
<Tab.Screen name='Tab-Compose' component={composeComponent} listeners={composeListeners} /> <Tab.Screen name='Tab-Compose' component={composeComponent} listeners={composeListeners} />
<Tab.Screen name='Tab-Notifications' component={TabNotifications} /> <Tab.Screen name='Tab-Notifications' component={TabNotifications} />
<Tab.Screen <Tab.Screen name='Tab-Me' component={TabMe} listeners={meListeners} />
name='Tab-Me'
component={TabMe}
options={tabMeOptions}
listeners={meListeners}
/>
</Tab.Navigator> </Tab.Navigator>
) )
}, },

View File

@ -12,12 +12,8 @@ import accountReducer from '@screens/Tabs/Shared/Account/utils/reducer'
import { useProfileQuery } from '@utils/queryHooks/profile' import { useProfileQuery } from '@utils/queryHooks/profile'
import { getInstanceActive } from '@utils/slices/instancesSlice' import { getInstanceActive } from '@utils/slices/instancesSlice'
import React, { useReducer, useRef } from 'react' import React, { useReducer, useRef } from 'react'
import Animated, { import Animated, { useAnimatedScrollHandler, useSharedValue } from 'react-native-reanimated'
useAnimatedScrollHandler,
useSharedValue
} from 'react-native-reanimated'
import { useSelector } from 'react-redux' import { useSelector } from 'react-redux'
import Update from './Root/Update'
const TabMeRoot: React.FC = () => { const TabMeRoot: React.FC = () => {
const instanceActive = useSelector(getInstanceActive) const instanceActive = useSelector(getInstanceActive)
@ -29,10 +25,7 @@ const TabMeRoot: React.FC = () => {
const scrollRef = useRef<Animated.ScrollView>(null) const scrollRef = useRef<Animated.ScrollView>(null)
useScrollToTop(scrollRef) useScrollToTop(scrollRef)
const [accountState, accountDispatch] = useReducer( const [accountState, accountDispatch] = useReducer(accountReducer, accountInitialState)
accountReducer,
accountInitialState
)
const scrollY = useSharedValue(0) const scrollY = useSharedValue(0)
const onScroll = useAnimatedScrollHandler(event => { const onScroll = useAnimatedScrollHandler(event => {
@ -41,22 +34,15 @@ const TabMeRoot: React.FC = () => {
return ( return (
<AccountContext.Provider value={{ accountState, accountDispatch }}> <AccountContext.Provider value={{ accountState, accountDispatch }}>
{instanceActive !== -1 && data ? ( {instanceActive !== -1 && data ? <AccountNav scrollY={scrollY} account={data} /> : null}
<AccountNav scrollY={scrollY} account={data} />
) : null}
<Animated.ScrollView <Animated.ScrollView
ref={scrollRef} ref={scrollRef}
keyboardShouldPersistTaps='handled' keyboardShouldPersistTaps='handled'
onScroll={onScroll} onScroll={onScroll}
scrollEventThrottle={16} scrollEventThrottle={16}
> >
{instanceActive !== -1 ? ( {instanceActive !== -1 ? <MyInfo account={data} /> : <ComponentInstance />}
<MyInfo account={data} />
) : (
<ComponentInstance />
)}
{instanceActive !== -1 ? <Collections /> : null} {instanceActive !== -1 ? <Collections /> : null}
<Update />
<Settings /> <Settings />
{instanceActive !== -1 ? <AccountInformationSwitch /> : null} {instanceActive !== -1 ? <AccountInformationSwitch /> : null}
{instanceActive !== -1 ? <Logout /> : null} {instanceActive !== -1 ? <Logout /> : null}

View File

@ -1,32 +0,0 @@
import { MenuContainer, MenuRow } from '@components/Menu'
import { getVersionUpdate } from '@utils/slices/appSlice'
import React from 'react'
import { useTranslation } from 'react-i18next'
import { Linking, Platform } from 'react-native'
import { useSelector } from 'react-redux'
const Update: React.FC = () => {
const { t } = useTranslation('screenTabs')
const versionUpdate = useSelector(getVersionUpdate)
return versionUpdate ? (
<MenuContainer>
<MenuRow
iconFront='ChevronsUp'
iconBack='ExternalLink'
title={t('me.root.update.title')}
badge
onPress={() => {
if (Platform.OS === 'ios') {
Linking.openURL('itms-appss://itunes.apple.com/app/id1549772269')
} else {
Linking.openURL('https://tooot.app')
}
}}
/>
</MenuContainer>
) : null
}
export default Update

View File

@ -1,8 +1,6 @@
import apiTooot from '@api/tooot'
import { createAsyncThunk, createSlice } from '@reduxjs/toolkit' import { createAsyncThunk, createSlice } from '@reduxjs/toolkit'
import { RootState } from '@root/store' import { RootState } from '@root/store'
import { isDevelopment } from '@utils/checkEnvironment' import { isDevelopment } from '@utils/checkEnvironment'
import Constants from 'expo-constants'
import * as Notifications from 'expo-notifications' import * as Notifications from 'expo-notifications'
export const retrieveExpoToken = createAsyncThunk('app/expoToken', async (): Promise<string> => { export const retrieveExpoToken = createAsyncThunk('app/expoToken', async (): Promise<string> => {
@ -17,22 +15,12 @@ export const retrieveExpoToken = createAsyncThunk('app/expoToken', async (): Pro
return res.data return res.data
}) })
export const retrieveVersionLatest = createAsyncThunk(
'app/versionUpdate',
async (): Promise<string> => {
const res = await apiTooot<{ latest: string }>({ method: 'get', url: 'version.json' })
return res.body.latest
}
)
export type AppState = { export type AppState = {
expoToken?: string expoToken?: string
versionUpdate: boolean
} }
export const appInitialState: AppState = { export const appInitialState: AppState = {
expoToken: undefined, expoToken: undefined
versionUpdate: false
} }
const appSlice = createSlice({ const appSlice = createSlice({
@ -40,22 +28,14 @@ const appSlice = createSlice({
initialState: appInitialState, initialState: appInitialState,
reducers: {}, reducers: {},
extraReducers: builder => { extraReducers: builder => {
builder builder.addCase(retrieveExpoToken.fulfilled, (state, action) => {
.addCase(retrieveExpoToken.fulfilled, (state, action) => {
if (action.payload) { if (action.payload) {
state.expoToken = action.payload state.expoToken = action.payload
} }
}) })
.addCase(retrieveVersionLatest.fulfilled, (state, action) => {
if (action.payload && Constants.expoConfig?.version) {
state.versionUpdate =
parseFloat(action.payload) > parseFloat(Constants.expoConfig.version)
}
})
} }
}) })
export const getExpoToken = (state: RootState) => state.app.expoToken export const getExpoToken = (state: RootState) => state.app.expoToken
export const getVersionUpdate = (state: RootState) => state.app.versionUpdate
export default appSlice.reducer export default appSlice.reducer