@applicaster/zapp-react-native-ui-components
Version:
Applicaster Zapp React Native ui components for the Quick Brick App
54 lines (41 loc) • 1.47 kB
text/typescript
import { usePickFromState } from "@applicaster/zapp-react-native-redux/hooks";
import {
useGetScreenOrientation,
isOrientationCompatible,
} from "@applicaster/zapp-react-native-utils/appUtils/orientationHelper";
import {
useCurrentScreenData,
useDimensions,
useRoute,
useIsTablet,
} from "@applicaster/zapp-react-native-utils/reactHooks";
import { useMemo, useEffect, useState } from "react";
export const useWaitForValidOrientation = () => {
const { width: screenWidth, height } = useDimensions("screen", {
fullDimensions: true,
updateForInactiveScreens: false,
});
const currentScreenData = useCurrentScreenData();
const { screenData } = useRoute();
const [readyState, setReadyState] = useState(false);
const isTablet = useIsTablet();
const { appData } = usePickFromState(["appData"]);
const isTabletPortrait = appData?.isTabletPortrait;
const layoutData = useMemo(
() => ({ isTablet, isTabletPortrait, width: screenWidth, height }),
[isTablet, isTabletPortrait, screenWidth, height]
);
const targetScreenData =
currentScreenData || (screenData as any)?.targetScreen || screenData;
const orientation = useGetScreenOrientation(targetScreenData);
const isReadyForDisplay = isOrientationCompatible({
orientation,
layoutData,
});
useEffect(() => {
if (isReadyForDisplay && !readyState) {
setReadyState(true);
}
}, [readyState, orientation, layoutData]);
return readyState;
};