@applicaster/zapp-react-native-ui-components
Version:
Applicaster Zapp React Native ui components for the Quick Brick App
84 lines (66 loc) • 2.35 kB
text/typescript
import { resolveNavigationPlugin } from "@applicaster/zapp-react-native-utils/navigationUtils";
export const BOTTOM_TABS_PLUGIN_ID = "quick-brick-bottom-tabs";
export const SIDE_MENU_PLUGIN_ID = "quick_brick_side_menu";
export function getMenuPlugin(screenData, plugins) {
return resolveNavigationPlugin({
category: "menu",
navigations:
screenData?.navigations || screenData?.targetScreen?.navigations,
plugins,
});
}
function shouldShowNavigation(route, screenData) {
if (route.includes("playable")) {
return false;
}
if (
screenData.type === "qb_search_screen" ||
screenData?.targetScreen?.type === "qb_search_screen"
) {
return false;
}
if (screenData?.hookPlugin) {
const hookPlugin = screenData?.hookPlugin?.module;
return hookPlugin?.showNavBar || hookPlugin?.presentFullScreen !== true;
}
if (
screenData?.general?.allow_screen_plugin_presentation ||
screenData?.targetScreen?.general?.allow_screen_plugin_presentation
) {
return false;
}
return true;
}
/**
* This function helps to decide whether the menu should be presented on the screen
* based on route and / or screen Data
*
* is similar to the navbar, except that it covers scenarios where only the navbar (and not)
* the menu will be hidden
*
* - playable screens
* - qb_search_screen
* - screen hooks that specify showNavBar or presentFullScreen
* - screens or nested screens that have allow_screen_plugin_presentation set to true
*
* @param {String} route current route of the screen
* @param {Object} screenData payload associated with the currently presented screen
* @returns {Boolean}
*/
export function isMenuVisible(route, screenData, plugins) {
const plugin = getMenuPlugin(screenData, plugins);
const isBottomTabsPlugin = plugin?.identifier === BOTTOM_TABS_PLUGIN_ID;
const isSideMenuPlugin = plugin?.identifier === SIDE_MENU_PLUGIN_ID;
if (!isBottomTabsPlugin && !isSideMenuPlugin) {
return false;
}
return shouldShowNavigation(route, screenData);
}
export function isBottomTabVisible(route, screenData, plugins) {
const plugin = getMenuPlugin(screenData, plugins);
const isBottomTabsPlugin = plugin?.identifier === BOTTOM_TABS_PLUGIN_ID;
if (!isBottomTabsPlugin) {
return false;
}
return shouldShowNavigation(route, screenData);
}