UNPKG

@applicaster/quick-brick-core

Version:

Core package for Applicaster's Quick Brick App

109 lines (89 loc) 3.01 kB
import * as R from "ramda"; import { loadAppContextData } from "@applicaster/zapp-react-native-redux"; import { URL_KEYS } from "../consts"; import { fetchPluginConfiguration, getPromiseForKey, prepareRuntimeConfigurationUrls, } from "../helpers"; import { isTablet } from "@applicaster/zapp-react-native-utils/reactHooks"; import { Dimensions } from "react-native"; import { cacheAssets } from "../../AssetCache"; const buildContextData = (remoteData) => { const { width, height } = Dimensions.get("window"); const { tabletLayout = null, tabletCellStyles = null } = remoteData; const useTabletLayout = isTablet({ width, height }, width > height ? "landscape" : "portrait") && tabletLayout && tabletCellStyles; if (useTabletLayout) { remoteData.rivers = tabletLayout; remoteData.cellStyles = tabletCellStyles; } return remoteData; }; export async function getLegacyRemoteContextData( dispatch, runtimeConfigurationUrls, plugins ) { const layoutManagerPlugin = R.find( R.pathSatisfies(R.is(Function), ["module", "selectLayout"]) )(plugins); const { width, height } = Dimensions.get("window"); const isTabletDevice = isTablet( { width, height }, width > height ? "landscape" : "portrait" ); const configurationUrls = await layoutManagerPlugin?.module?.selectLayout({ runtimeConfigurationUrls, plugin: layoutManagerPlugin, isTablet: isTabletDevice, }); const { preparedRuntimeConfigurationUrls, layoutData = [] } = await prepareRuntimeConfigurationUrls( configurationUrls || runtimeConfigurationUrls, isTabletDevice ); const promises = R.compose( R.map(getPromiseForKey(preparedRuntimeConfigurationUrls)), R.reject(R.isNil), R.keys, R.pick(URL_KEYS) )(preparedRuntimeConfigurationUrls); const resolvedPromises = await Promise.all(promises); const remoteData = R.compose( buildContextData, R.mergeAll )([...layoutData, ...resolvedPromises]); const useTabletLayout = isTabletDevice && Boolean(remoteData.tabletLayout) && Boolean(remoteData.tabletCellStyles); const cachedRemoteData = await cacheAssets({ layout: useTabletLayout ? remoteData.tabletLayout : remoteData.layout, pluginConfigurations: remoteData.pluginConfigurations, cellStyles: useTabletLayout ? remoteData.tabletCellStyles : remoteData.cellStyles, }); const { pluginConfigurations } = cachedRemoteData; const updatedPlugins = R.map( fetchPluginConfiguration(pluginConfigurations), plugins ); const appProperties = R.compose( R.mergeLeft({ contentTypes: useTabletLayout ? remoteData?.tabletLayout?.content_types : remoteData.layout?.content_types, rivers: cachedRemoteData.layout, cellStyles: cachedRemoteData.cellStyles, }), R.omit(["layout", "tabletLayout", "tabletCellStyles"]) )(remoteData); loadAppContextData(dispatch, { ...appProperties, plugins: updatedPlugins, }); }