@applicaster/quick-brick-core
Version:
Core package for Applicaster's Quick Brick App
67 lines (56 loc) • 1.75 kB
text/typescript
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")))
);