@applicaster/zapp-react-native-utils
Version:
Applicaster Zapp React Native utilities package
61 lines (45 loc) • 1.84 kB
text/typescript
import { useContext, useMemo } from "react";
import { useModalNavigationContext } from "@applicaster/zapp-react-native-ui-components/Contexts/ModalNavigationContext";
import { useNestedNavigationContext } from "@applicaster/zapp-react-native-ui-components/Contexts/NestedNavigationContext";
import { useNavigation } from "../navigation/useNavigation";
import { ScreenContext } from "@applicaster/zapp-react-native-ui-components/Contexts/ScreenContext";
import { ScreenDataContext } from "@applicaster/zapp-react-native-ui-components/Contexts/ScreenDataContext";
export function useScreenContextV2() {
return useContext(ScreenContext);
}
/**
* Equivalent to existing useNavigation().screenData
* @returns legacyFormatScreenData - screen configuration
*/
export function useLegacyScreenData() {
const { legacyFormatScreenData } = useScreenContextV2();
return useMemo(() => legacyFormatScreenData, [legacyFormatScreenData]);
}
export function useNavbarState() {
const {
navBar: { title, summary, visible },
} = useScreenContextV2();
return useMemo(
() => ({ title, summary, visible }),
[title, summary, visible]
);
}
export function useSetNavbarState() {
const {
navBar: { setSummary, setTitle, setVisible },
} = useScreenContextV2();
return useMemo(
() => ({ setSummary, setTitle, setVisible }),
[setSummary, setTitle, setVisible]
);
}
export function useScreenContext(): NavigationScreenData {
const navigator = useNavigation();
const screenData = useContext(ScreenDataContext);
const modalScreenData = navigator?.modalData;
const isModal = useModalNavigationContext();
const isNested = useNestedNavigationContext();
if (isModal && modalScreenData) return modalScreenData;
if (isNested && screenData?.nested) return screenData?.nested;
return screenData;
}