From 328aa2be9482f77cb1cf86c5d227fdcee9981b16 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Wed, 6 Aug 2025 15:15:52 -0500 Subject: [APP-1356] Policy update dialog (#8782) * Add blocking announcement dialog feature * WIP custom dialog * Rework dialog and add native FocusScope * Lock scroll on web, fix backdrop * Add web FocusScope * Create custom Outlet for these announcements * Clean up FocusScope native impl * Comments * Some styling fixes * Handle screen reader specifically * Clean up state, remove Portal edits * Reorg, rename * Add syncing, tests * Revert dialog updates * Revert formatting * Delete unused file * Format * Add FullWindowOverlay * remove mmkv storage in debug btn * Add debug code * fix taps passing through on iOS * Reorg * Reorg, rename everything * Complete policy update after signup * Add logger * Move context around, unmount portals on native * Move a11y prop into FocusScope * Remove useMemo * Update dates * Move debug to dev settings * Unmount web portals until policy update completed * UPdate dates --------- Co-authored-by: Samuel Newman --- src/components/PolicyUpdateOverlay/Overlay.tsx | 139 +++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 src/components/PolicyUpdateOverlay/Overlay.tsx (limited to 'src/components/PolicyUpdateOverlay/Overlay.tsx') diff --git a/src/components/PolicyUpdateOverlay/Overlay.tsx b/src/components/PolicyUpdateOverlay/Overlay.tsx new file mode 100644 index 000000000..dd071ef15 --- /dev/null +++ b/src/components/PolicyUpdateOverlay/Overlay.tsx @@ -0,0 +1,139 @@ +import {type ReactNode} from 'react' +import {ScrollView, View} from 'react-native' +import { + useSafeAreaFrame, + useSafeAreaInsets, +} from 'react-native-safe-area-context' +import {LinearGradient} from 'expo-linear-gradient' + +import {isAndroid, isNative} from '#/platform/detection' +import {useA11y} from '#/state/a11y' +import {atoms as a, flatten, useBreakpoints, useTheme, web} from '#/alf' +import {transparentifyColor} from '#/alf/util/colorGeneration' +import {FocusScope} from '#/components/FocusScope' +import {LockScroll} from '#/components/LockScroll' + +const GUTTER = 24 + +export function Overlay({ + children, + label, +}: { + children: ReactNode + label: string +}) { + const t = useTheme() + const {gtPhone} = useBreakpoints() + const {reduceMotionEnabled} = useA11y() + const insets = useSafeAreaInsets() + const frame = useSafeAreaFrame() + + return ( + <> + + + + {gtPhone ? ( + + + + ) : ( + + )} + + + + {/** + * This is needed to prevent centered dialogs from overflowing + * above the screen, and provides a "natural" centering so that + * stacked dialogs appear relatively aligned. + */} + + {!gtPhone && ( + + + + )} + + + + {children} + + + + + + ) +} -- cgit 1.4.1