fix: mobile workspace related fixes (#1130)

* feat: put workspaces under unfinished features flag

* fix: mention that signing out will quit the app

* fix: put more affected places under features flag
This commit is contained in:
Vardan Hakobyan
2022-06-22 00:06:08 +04:00
committed by GitHub
parent cb209b8dfd
commit 3b4797c243
7 changed files with 42 additions and 16 deletions

View File

@@ -5,6 +5,7 @@ import { ApplicationGroup } from '@Lib/ApplicationGroup'
import { navigationRef } from '@Lib/NavigationService'
import { DefaultTheme, NavigationContainer } from '@react-navigation/native'
import { ApplicationGroupContext } from '@Root/ApplicationGroupContext'
import { EnvironmentContext } from '@Root/EnvironmentContext'
import { MobileThemeVariables } from '@Root/Style/Themes/styled-components'
import { ApplicationGroupEvent, DeinitMode, DeinitSource } from '@standardnotes/snjs'
import { ThemeService, ThemeServiceContext } from '@Style/ThemeService'
@@ -111,11 +112,13 @@ const AppComponent: React.FC<{
{themeService.current && (
<>
<ThemeProvider theme={activeTheme}>
<ActionSheetProvider>
<ThemeServiceContext.Provider value={themeService.current}>
<MainStackComponent env={env} />
</ThemeServiceContext.Provider>
</ActionSheetProvider>
<EnvironmentContext.Provider value={env}>
<ActionSheetProvider>
<ThemeServiceContext.Provider value={themeService.current}>
<MainStackComponent env={env} />
</ThemeServiceContext.Provider>
</ActionSheetProvider>
</EnvironmentContext.Provider>
<ToastWrapper />
</ThemeProvider>
</>

View File

@@ -0,0 +1,6 @@
import { TEnvironment } from '@Root/App'
import React from 'react'
export const EnvironmentContext = React.createContext<TEnvironment | undefined>(undefined)
export const SafeEnvironmentContext = EnvironmentContext as React.Context<TEnvironment>

View File

@@ -0,0 +1,8 @@
import { TEnvironment } from '@Root/App'
import { EnvironmentContext } from '@Root/EnvironmentContext'
import { useContext } from 'react'
export const useSafeEnvironmentContext = () => {
const env = useContext(EnvironmentContext) as TEnvironment
return env
}

View File

@@ -1,3 +1,4 @@
import { IsDev } from '@Lib/Utils'
import AsyncStorage from '@react-native-community/async-storage'
import SNReactNative from '@standardnotes/react-native-utils'
import {
@@ -315,7 +316,9 @@ export class MobileDeviceInterface implements DeviceInterface {
}
performSoftReset() {
SNReactNative.exitApp()
if (IsDev) {
SNReactNative.exitApp()
}
}
// eslint-disable-next-line @typescript-eslint/no-empty-function

View File

@@ -1,4 +1,5 @@
import { useSignedIn } from '@Lib/SnjsHelperHooks'
import { isUnfinishedFeaturesEnabled } from '@Lib/Utils'
import { useNavigation } from '@react-navigation/native'
import { ButtonCell } from '@Root/Components/ButtonCell'
import { SectionedAccessoryTableCell } from '@Root/Components/SectionedAccessoryTableCell'
@@ -6,6 +7,7 @@ import { SectionedOptionsTableCell } from '@Root/Components/SectionedOptionsTabl
import { SectionHeader } from '@Root/Components/SectionHeader'
import { TableSection } from '@Root/Components/TableSection'
import { useSafeApplicationContext } from '@Root/Hooks/useSafeApplicationContext'
import { useSafeEnvironmentContext } from '@Root/Hooks/useSafeEnvironmentContext'
import { ModalStackNavigationProp } from '@Root/ModalStack'
import { SCREEN_MANAGE_SESSIONS, SCREEN_SETTINGS } from '@Root/Screens/screens'
import { ButtonType, PrefKey } from '@standardnotes/snjs'
@@ -26,6 +28,7 @@ export const OptionsSection = ({ title, encryptionAvailable }: Props) => {
const [signedIn] = useSignedIn()
const navigation = useNavigation<ModalStackNavigationProp<typeof SCREEN_SETTINGS>['navigation']>()
const env = useSafeEnvironmentContext()
// State
const [importing, setImporting] = useState(false)
@@ -76,14 +79,14 @@ export const OptionsSection = ({ title, encryptionAvailable }: Props) => {
}, [encryptionAvailable])
const destroyLocalData = async () => {
if (
await application.alertService.confirm(
'Signing out will remove all data from this device, including notes and tags. Make sure your data is synced before proceeding.',
'Sign Out?',
'Sign Out',
ButtonType.Danger,
)
) {
let signoutText =
'Signing out will remove all data from this device, including notes and tags. Make sure your data is synced before proceeding.'
if (isUnfinishedFeaturesEnabled(env)) {
signoutText += '\n\nYour app will quit after sign out completes.'
}
if (await application.alertService.confirm(signoutText, 'Sign Out?', 'Sign Out', ButtonType.Danger)) {
await application.user.signOut()
}
}

View File

@@ -67,7 +67,7 @@ export const WorkspacesSection = () => {
break
case Remove:
message =
'This action will remove this workspace and its related data from this device. Your synced data will not be affected.'
'This action will remove this workspace and its related data from this device. Your synced data will not be affected.\n\nYour app will quit after workspace removal completes.'
buttonText = 'Delete Workspace'
buttonType = Danger
break

View File

@@ -1,5 +1,7 @@
import { useSignedIn } from '@Lib/SnjsHelperHooks'
import { isUnfinishedFeaturesEnabled } from '@Lib/Utils'
import { useSafeApplicationContext } from '@Root/Hooks/useSafeApplicationContext'
import { useSafeEnvironmentContext } from '@Root/Hooks/useSafeEnvironmentContext'
import { ModalStackNavigationProp } from '@Root/ModalStack'
import { SCREEN_SETTINGS } from '@Root/Screens/screens'
import { FilesSection } from '@Screens/Settings/Sections/FilesSection'
@@ -20,6 +22,7 @@ type Props = ModalStackNavigationProp<typeof SCREEN_SETTINGS>
export const Settings = (props: Props) => {
// Context
const application = useSafeApplicationContext()
const env = useSafeEnvironmentContext()
// State
const [hasPasscode, setHasPasscode] = useState(() => Boolean(application.hasPasscode()))
@@ -55,7 +58,7 @@ export const Settings = (props: Props) => {
<Container keyboardShouldPersistTaps={'always'} keyboardDismissMode={'interactive'}>
<AuthSection title="Account" signedIn={signedIn} />
<OptionsSection encryptionAvailable={!!encryptionAvailable} title="Options" />
<WorkspacesSection />
{isUnfinishedFeaturesEnabled(env) && <WorkspacesSection />}
<PreferencesSection />
{application.hasAccount() && isEntitledToFiles && <FilesSection />}
<SecuritySection