Open History to see the last commit
1import { requireNativeView, requireOptionalNativeModule } from "expo";
2import type { NativeSyntheticEvent, ViewProps } from "react-native";
3import type { NativeLayoutMetrics } from "../lib/reserved-regions";
4
5interface ObserverProps extends ViewProps {
6 readonly onMetricsChange?: (event: NativeSyntheticEvent<NativeLayoutMetrics>) => void;
7}
8
9function resolveObserver() {
10 try {
11 const module = requireOptionalNativeModule<{
12 readonly ViewPrototypes?: { readonly T3NativeControls_LayoutMetrics?: unknown };
13 }>("T3NativeControls");
14 if (!module?.ViewPrototypes?.T3NativeControls_LayoutMetrics) return null;
15 return requireNativeView<ObserverProps>("T3NativeControls", "LayoutMetrics");
16 } catch {
17 return null;
18 }
19}
20const Observer = resolveObserver();
21
22export function NativeLayoutObserver(props: {
23 readonly onChange?: (metrics: NativeLayoutMetrics) => void;
24}) {
25 return Observer ? (
26 <Observer
27 pointerEvents="none"
28 onMetricsChange={props.onChange ? (event) => props.onChange?.(event.nativeEvent) : undefined}
29 style={{ position: "absolute", top: 0, bottom: 0, left: 0, right: 0 }}
30 />
31 ) : null;
32}