UNPKG

@applicaster/quick-brick-core

Version:

Core package for Applicaster's Quick Brick App

67 lines (56 loc) 1.75 kB
import * as R from "ramda"; import { createSelector } from "@reduxjs/toolkit"; import { getPathAttributes } from "@applicaster/zapp-react-native-utils/navigationUtils"; const riverSelector = R.prop("rivers"); const pathnameSelector = R.prop("pathname"); const navigationStackSelector = R.prop("stack"); // @TODO extract to zapp-react-native-redux/selectors, remove ramda export const homeRiverSelector = createSelector( riverSelector, R.compose(R.find(R.propEq("home", true)), R.values) ); export const activeRiverSelector = createSelector( riverSelector, pathnameSelector, (rivers, pathname) => { const homePathname = R.compose( R.find(R.propEq("home", true)), R.values )(rivers); if (pathname === "/") { return homePathname; } const activePath = R.compose( R.defaultTo(null), R.prop(R.__, rivers), R.prop("screenId"), R.findLast(({ screenId }) => !!R.path([screenId, "navigations"], rivers)), getPathAttributes )({ pathname }); return activePath || homePathname; } ); export const firstStackEntriesSelector = createSelector( navigationStackSelector, R.compose( R.reject(R.compose(R.test(/\/hooks\//), R.prop("route"))), (stack) => [R.head(stack)], R.when(R.has("mainStack"), R.prop("mainStack")) ) ); export const previousStackEntriesSelector = createSelector( navigationStackSelector, R.compose( R.reject(R.compose(R.test(/\/hooks\//), R.prop("route"))), R.init, R.when(R.has("mainStack"), R.prop("mainStack")) ) ); export const lastEntrySelector = createSelector< unknown, unknown, NavigationScreenState >( navigationStackSelector, R.compose(R.last, R.when(R.has("mainStack"), R.prop("mainStack"))) );