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 { navigationRef } from '@Lib/NavigationService'
import { DefaultTheme, NavigationContainer } from '@react-navigation/native' import { DefaultTheme, NavigationContainer } from '@react-navigation/native'
import { ApplicationGroupContext } from '@Root/ApplicationGroupContext' import { ApplicationGroupContext } from '@Root/ApplicationGroupContext'
import { EnvironmentContext } from '@Root/EnvironmentContext'
import { MobileThemeVariables } from '@Root/Style/Themes/styled-components' import { MobileThemeVariables } from '@Root/Style/Themes/styled-components'
import { ApplicationGroupEvent, DeinitMode, DeinitSource } from '@standardnotes/snjs' import { ApplicationGroupEvent, DeinitMode, DeinitSource } from '@standardnotes/snjs'
import { ThemeService, ThemeServiceContext } from '@Style/ThemeService' import { ThemeService, ThemeServiceContext } from '@Style/ThemeService'
@@ -111,11 +112,13 @@ const AppComponent: React.FC<{
{themeService.current && ( {themeService.current && (
<> <>
<ThemeProvider theme={activeTheme}> <ThemeProvider theme={activeTheme}>
<ActionSheetProvider> <EnvironmentContext.Provider value={env}>
<ThemeServiceContext.Provider value={themeService.current}> <ActionSheetProvider>
<MainStackComponent env={env} /> <ThemeServiceContext.Provider value={themeService.current}>
</ThemeServiceContext.Provider> <MainStackComponent env={env} />
</ActionSheetProvider> </ThemeServiceContext.Provider>
</ActionSheetProvider>
</EnvironmentContext.Provider>
<ToastWrapper /> <ToastWrapper />
</ThemeProvider> </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 AsyncStorage from '@react-native-community/async-storage'
import SNReactNative from '@standardnotes/react-native-utils' import SNReactNative from '@standardnotes/react-native-utils'
import { import {
@@ -315,7 +316,9 @@ export class MobileDeviceInterface implements DeviceInterface {
} }
performSoftReset() { performSoftReset() {
SNReactNative.exitApp() if (IsDev) {
SNReactNative.exitApp()
}
} }
// eslint-disable-next-line @typescript-eslint/no-empty-function // eslint-disable-next-line @typescript-eslint/no-empty-function

View File

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

View File

@@ -67,7 +67,7 @@ export const WorkspacesSection = () => {
break break
case Remove: case Remove:
message = 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' buttonText = 'Delete Workspace'
buttonType = Danger buttonType = Danger
break break

View File

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