From d85c8a09760aa91c080465840144b61155dc7ddf Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Tue, 11 Jun 2024 04:10:57 +0100 Subject: Revert to old modal on android (#4458) * revert to old modal on android * close alf dialogs before closing composer * Try to fix white area * Use hook * Fix Back button * oops --------- Co-authored-by: Dan Abramov --- src/view/shell/Composer.ios.tsx | 80 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 src/view/shell/Composer.ios.tsx (limited to 'src/view/shell/Composer.ios.tsx') diff --git a/src/view/shell/Composer.ios.tsx b/src/view/shell/Composer.ios.tsx new file mode 100644 index 000000000..a732e0cde --- /dev/null +++ b/src/view/shell/Composer.ios.tsx @@ -0,0 +1,80 @@ +import React, {useLayoutEffect} from 'react' +import {Modal, View} from 'react-native' +import {StatusBar} from 'expo-status-bar' +import * as SystemUI from 'expo-system-ui' +import {observer} from 'mobx-react-lite' + +import {useComposerState} from '#/state/shell/composer' +import {atoms as a, useTheme} from '#/alf' +import {getBackgroundColor, useThemeName} from '#/alf/util/useColorModeTheme' +import {ComposePost, useComposerCancelRef} from '../com/composer/Composer' + +export const Composer = observer(function ComposerImpl({}: { + winHeight: number +}) { + const t = useTheme() + const state = useComposerState() + const ref = useComposerCancelRef() + + const open = !!state + + return ( + ref.current?.onPressCancel()}> + + + + + + + ) +}) + +function Providers({ + children, + open, +}: { + children: React.ReactNode + open: boolean +}) { + // on iOS, it's a native formSheet. We use FullWindowOverlay to make + // the dialogs appear over it + return ( + <> + {children} + + + ) +} + +// Generally, the backdrop of the app is the theme color, but when this is open +// we want it to be black due to the modal being a form sheet. +function IOSModalBackground({active}: {active: boolean}) { + const theme = useThemeName() + + useLayoutEffect(() => { + SystemUI.setBackgroundColorAsync('black') + + return () => { + SystemUI.setBackgroundColorAsync(getBackgroundColor(theme)) + } + }, [theme]) + + // Set the status bar to light - however, only if the modal is active + // If we rely on this component being mounted to set this, + // there'll be a delay before it switches back to default. + return active ? : null +} -- cgit 1.4.1