diff options
Diffstat (limited to 'src/components/Layout/index.tsx')
-rw-r--r-- | src/components/Layout/index.tsx | 43 |
1 files changed, 35 insertions, 8 deletions
diff --git a/src/components/Layout/index.tsx b/src/components/Layout/index.tsx index 489ebb225..623478a6a 100644 --- a/src/components/Layout/index.tsx +++ b/src/components/Layout/index.tsx @@ -13,7 +13,15 @@ import {useSafeAreaInsets} from 'react-native-safe-area-context' import {isWeb} from '#/platform/detection' import {useShellLayout} from '#/state/shell/shell-layout' -import {atoms as a, useBreakpoints, useTheme, web} from '#/alf' +import { + atoms as a, + useBreakpoints, + useLayoutBreakpoints, + useTheme, + web, +} from '#/alf' +import {useDialogContext} from '#/components/Dialog' +import {SCROLLBAR_OFFSET} from '#/components/Layout/const' import {ScrollbarOffsetContext} from '#/components/Layout/context' export * from '#/components/Layout/const' @@ -47,6 +55,7 @@ export const Screen = React.memo(function Screen({ export type ContentProps = AnimatedScrollViewProps & { style?: StyleProp<ViewStyle> contentContainerStyle?: StyleProp<ViewStyle> + ignoreTabletLayoutOffset?: boolean } /** @@ -56,6 +65,7 @@ export const Content = React.memo(function Content({ children, style, contentContainerStyle, + ignoreTabletLayoutOffset, ...props }: ContentProps) { const t = useTheme() @@ -84,8 +94,10 @@ export const Content = React.memo(function Content({ ]} {...props}> {isWeb ? ( - // @ts-ignore web only -esb - <Center>{children}</Center> + <Center ignoreTabletLayoutOffset={ignoreTabletLayoutOffset}> + {/* @ts-expect-error web only -esb */} + {children} + </Center> ) : ( children )} @@ -138,10 +150,13 @@ export const KeyboardAwareContent = React.memo(function LayoutScrollView({ export const Center = React.memo(function LayoutContent({ children, style, + ignoreTabletLayoutOffset, ...props -}: ViewProps) { +}: ViewProps & {ignoreTabletLayoutOffset?: boolean}) { const {isWithinOffsetView} = useContext(ScrollbarOffsetContext) const {gtMobile} = useBreakpoints() + const {centerColumnOffset} = useLayoutBreakpoints() + const {isWithinDialog} = useDialogContext() const ctx = useMemo(() => ({isWithinOffsetView: true}), []) return ( <View @@ -151,8 +166,20 @@ export const Center = React.memo(function LayoutContent({ gtMobile && { maxWidth: 600, }, + !isWithinOffsetView && { + transform: [ + { + translateX: + centerColumnOffset && + !ignoreTabletLayoutOffset && + !isWithinDialog + ? -150 + : 0, + }, + {translateX: web(SCROLLBAR_OFFSET) ?? 0}, + ], + }, style, - !isWithinOffsetView && a.scrollbar_offset, ]} {...props}> <ScrollbarOffsetContext.Provider value={ctx}> @@ -168,6 +195,7 @@ export const Center = React.memo(function LayoutContent({ const WebCenterBorders = React.memo(function LayoutContent() { const t = useTheme() const {gtMobile} = useBreakpoints() + const {centerColumnOffset} = useLayoutBreakpoints() return gtMobile ? ( <View style={[ @@ -180,9 +208,8 @@ const WebCenterBorders = React.memo(function LayoutContent() { width: 602, left: '50%', transform: [ - { - translateX: '-50%', - }, + {translateX: '-50%'}, + {translateX: centerColumnOffset ? -150 : 0}, ...a.scrollbar_offset.transform, ], }), |