diff --git a/package/CoreApp.js b/package/CoreApp.js index 308d1906..cba9f1ae 100644 --- a/package/CoreApp.js +++ b/package/CoreApp.js @@ -7,6 +7,7 @@ import { WrappidSyncer } from "@wrappid/styles"; import CoreAppDiv from "./components/layouts/CoreAppDiv"; import CoreNavigation from "./components/navigation/CoreNavigation"; +import CoreAppStrictWrapper from "./CoreAppStrictWrapper"; import CoreRoutes from "./CoreRoutes"; import CoreProvider from "./store/CoreProvider"; @@ -28,31 +29,33 @@ export default function CoreApp(props) { } = props; return ( - - - - - - - - - + + + + + + + + + + + ); } diff --git a/package/CoreAppStrictWrapper.js b/package/CoreAppStrictWrapper.js new file mode 100644 index 00000000..62b17520 --- /dev/null +++ b/package/CoreAppStrictWrapper.js @@ -0,0 +1,14 @@ +import React from "react"; + +// eslint-disable-next-line import/no-unresolved +import { WrappidDataContext } from "@wrappid/styles"; + +import { ENV_DEV_MODE } from "./config/constants"; + +function CoreAppStrictWrapper(props) { + let { config } = React.useContext(WrappidDataContext); + + return config?.environment === ENV_DEV_MODE ? {props?.children} : props?.children; +} + +export default CoreAppStrictWrapper; \ No newline at end of file diff --git a/package/CoreRoutes.js b/package/CoreRoutes.js index f7016598..515b1c7b 100644 --- a/package/CoreRoutes.js +++ b/package/CoreRoutes.js @@ -25,6 +25,11 @@ const DEFAULT_ROUTE = { url : "defaultAppRoute" }; +export let globalAccessToken = null; +export let globalRefreshToken = null; +export let globalTokenRequested = null; +export let globalTokenRequestTimeStamp = null; + export default function CoreRoutes() { const dispatch = useDispatch(); const routesRegistry = useContext(CoreRoutesContext); @@ -34,27 +39,38 @@ export default function CoreRoutes() { const { config } = React.useContext(WrappidDataContext); const [defaultRoute, setDefaultRoute] = useState(DEFAULT_ROUTE); - React.useEffect(() => { - config?.backendUrl && dispatch( - apiRequestAction( - HTTP.GET, - `${!authenticated ? "/noauth/" : "/" }business/all/RoutePages`, - true, - { _defaultFilter: encodeURIComponent(JSON.stringify({ authRequired: authenticated })) }, - GET_ROUTE_SUCCESS, - GET_ROUTE_FAILURE - ) - ); - - let defaultRouteName = authenticated ? config?.defaultAuthenticatedRoute : config?.defaultRoute; + const accessToken = useSelector((state) => state?.auth?.accessToken); + const refreshToken = useSelector((state) => state?.auth?.refreshToken); + const tokenRequested = useSelector((state) => state?.pendingRequests?.tokenRequested); + const tokenRequestTimeStamp = useSelector( + (state) => state?.pendingRequests?.tokenRequestTimeStamp + ); - if (defaultRouteName) { - if (Object.keys(routesRegistry).includes(defaultRouteName)) { - setDefaultRoute(routesRegistry[defaultRouteName]); - } else if (routesFromStore?.filter((route) => route?.entityRef === defaultRouteName)?.length > 0) { - setDefaultRoute(routesFromStore?.filter((route) => route?.entityRef === defaultRouteName)[0]); - } - } + globalAccessToken = accessToken; + globalRefreshToken = refreshToken; + globalTokenRequested = tokenRequested; + globalTokenRequestTimeStamp = tokenRequestTimeStamp; + + React.useEffect(() => { + // eslint-disable-next-line etc/no-commented-out-code + // config?.backendUrl && dispatch( + // apiRequestAction( + // HTTP.GET, + // `${!authenticated ? "/noauth/" : "/" }business/all/RoutePages`, + // true, + // { _defaultFilter: encodeURIComponent(JSON.stringify({ authRequired: authenticated })) }, + // GET_ROUTE_SUCCESS, + // GET_ROUTE_FAILURE + // ) + // ); + // let defaultRouteName = authenticated ? config?.defaultAuthenticatedRoute : config?.defaultRoute; + // if (defaultRouteName) { + // if (Object.keys(routesRegistry).includes(defaultRouteName)) { + // setDefaultRoute(routesRegistry[defaultRouteName]); + // } else if (routesFromStore?.filter((route) => route?.entityRef === defaultRouteName)?.length > 0) { + // setDefaultRoute(routesFromStore?.filter((route) => route?.entityRef === defaultRouteName)[0]); + // } + // } }, []); React.useEffect(() => { @@ -70,10 +86,10 @@ export default function CoreRoutes() { ) ); } - }, [authenticated]); + }, [config, authenticated]); useEffect(() => { - let defaultRouteName = /* authenticated ? config?.defaultAuthenticatedRoute : */ config?.defaultRoute; + let defaultRouteName = (authenticated ? config?.defaultAuthenticatedRoute : config?.defaultRoute) || config?.defaultRoute || DEFAULT_ROUTE; if (defaultRouteName) { if (Object.keys(routesRegistry).includes(defaultRouteName)) { diff --git a/package/components/layouts/_system/AppContainerLayout.js b/package/components/layouts/_system/AppContainerLayout.js index 3245dde1..8ed904b4 100644 --- a/package/components/layouts/_system/AppContainerLayout.js +++ b/package/components/layouts/_system/AppContainerLayout.js @@ -1,7 +1,8 @@ -import React, { useState } from "react"; +import React from "react"; // eslint-disable-next-line import/no-unresolved import { NativeAppContainer, nativeUseLocation } from "@wrappid/native"; +import { SMALL_WINDOW_WIDTH } from "@wrappid/styles"; import { useDispatch, useSelector } from "react-redux"; import { @@ -10,8 +11,7 @@ import { GET_USER_SETTINGS, UPDATE_USER_SETTINGS } from "../../../config/api"; -import { HTTP, SMALL_WINDOW_WIDTH, userSettingsConstants } from "../../../config/constants"; -import { CoreRouteRegistryContext } from "../../../config/contextHandler"; +import { HTTP, userSettingsConstants } from "../../../config/constants"; import CoreLayoutPlaceholder from "../../../layout/CoreLayoutPlaceholder"; import ComponentsRegistry from "../../../registry/ComponentsRegistry"; import { apiRequestAction } from "../../../store/action/appActions"; @@ -37,28 +37,18 @@ import CoreAppBar from "../../surfaces/CoreAppBar"; import CoreDrawer from "../../surfaces/CoreDrawer"; import CoreFooter from "../../surfaces/CoreFooter"; -export let globalAccessToken = null; -export let globalRefreshToken = null; -export let globalTokenRequested = null; -export let globalTokenRequestTimeStamp = null; - -function AppContainerLayout() { +export default function AppContainerLayout() { const windowWidth = window.innerWidth; + const leftMenuOpen = useSelector((state) => state?.menu?.leftMenuOpen); + const [leftMenuOpenSmallScreen, setLeftDrawerSmallScreen] = React.useState(false); + const _routes = useSelector((state) => state?.route?.routes); + const dispatch = useDispatch(); const location = nativeUseLocation(); const auth = useSelector((state) => state?.auth); const accessToken = useSelector((state) => state?.auth?.accessToken); - const refreshToken = useSelector((state) => state?.auth?.refreshToken); - const tokenRequested = useSelector((state) => state?.pendingRequests?.tokenRequested); - const tokenRequestTimeStamp = useSelector( - (state) => state?.pendingRequests?.tokenRequestTimeStamp - ); - const leftMenuOpen = useSelector((state) => state?.menu?.leftMenuOpen); - const [leftMenuOpenSmallScreen, setLeftDrawerSmallScreen] = useState(false); const currentPendingRequest = useSelector((state) => state.pendingRequests.pendingRequest); const recallState = useSelector((state) => state?.pendingRequests?.recall); - const _routes = useSelector((state) => state?.route?.routes); - const [routeRegistry, setRouteRegistry] = useState({}); // user settings // const reload = useSelector((state) => state?.settings?.reload); @@ -172,23 +162,12 @@ function AppContainerLayout() { }); }, []); - React.useEffect(() => { - let registry = {}; - - for (let i = 0; i < _routes?.length; i++) { - registry[_routes[i].entityRef] = _routes[i].url; - } - setRouteRegistry(registry); - }, [_routes]); - const getAppBar = () => { return auth?.uid ? : null; }; - const getFooter = () => { return ; }; - const getLeftDrawer = () => { return auth?.uid && auth?.accessToken ? ( + <> + {/* eslint-disable-next-line etc/no-commented-out-code */} + - + + ); } -export default AppContainerLayout; - AppContainerLayout.PLACEHOLDER = { CONTENT: "content" }; diff --git a/package/components/layouts/_system/BlankLayout.js b/package/components/layouts/_system/BlankLayout.js index 4bbe03da..2e679de2 100644 --- a/package/components/layouts/_system/BlankLayout.js +++ b/package/components/layouts/_system/BlankLayout.js @@ -6,11 +6,10 @@ import CoreClasses from "../../../styles/CoreClasses"; export default function BlankLayout() { - // eslint-disable-next-line etc/no-commented-out-code - // React.useEffect(() => { - // // eslint-disable-next-line no-console - // console.log("BlankLayout::useEffect"); - // }, []); + React.useEffect(() => { + // eslint-disable-next-line no-console + console.log("BlankLayout::useEffect"); + }, []); return ( <> diff --git a/package/index.js b/package/index.js index be03fb2c..bb7d262c 100644 --- a/package/index.js +++ b/package/index.js @@ -121,6 +121,7 @@ import { import CoreFormControlLabel from "./components/inputs/forms/CoreFormControlLabel"; import CoreFormGroup from "./components/inputs/forms/CoreFormGroup"; import ParentChildMap from "./components/inputs/ParentChildMap"; +import AppContainerLayout from "./components/layouts/_system/AppContainerLayout"; import BlankLayout from "./components/layouts/_system/BlankLayout"; import CenteredBlankLayout from "./components/layouts/_system/CenteredBlankLayout"; import ComplexLayout from "./components/layouts/_system/ComplexLayout"; @@ -250,7 +251,7 @@ import { } from "./utils/themeUtil"; export { - __EntityStatus, __IconTypes, apiRequestAction, APP_PLATFORM, AppService, BlankLayout, cancelFormEdit, CenteredBlankLayout, ChildMap, clearValidatePhoneEmail, ComplexLayout, ComponentNotFound, ComponentRegistryContext, config, CORE_DIALOG_TYPES, CoreAccordion, + __EntityStatus, __IconTypes, apiRequestAction, APP_PLATFORM, AppContainerLayout, AppService, BlankLayout, cancelFormEdit, CenteredBlankLayout, ChildMap, clearValidatePhoneEmail, ComplexLayout, ComponentNotFound, ComponentRegistryContext, config, CORE_DIALOG_TYPES, CoreAccordion, CoreAccordionDetail, CoreAccordionSummary, CoreAlert, CoreAlertTitle, CoreApiVersion, CoreApp, CoreAppBar, CoreAsyncSelect, @@ -295,15 +296,13 @@ export { CoreList, CoreListItem, CoreListItemAvatar, CoreListItemButton, CoreListItemIcon, CoreListItemText, CoreListSubheader, CoreLoginDetails, CoreMarkdownViewer, CoreMedicineSelector, CoreMenu, CoreMenuItem, - CoreMenuList, CoreModal, CoreMultiTimeRangePicker, coreOpenUrl, CoreOtpInput, + CoreMenuList, CoreModal, CoreMultiTimeRangePicker, CoreNetworkStatus, coreOpenUrl, CoreOtpInput, CoreOutlinedButton, CorePaper, CorePhone, CorePhoneLink, CorePopover, CoreProfilePopOver, CoreProvider, CoreRating, CoreReactSelectInput, CoreResourceContext, CoreResponsiveButton, CoreRichTextEditor, CoreRightDrawer, CoreRouteRegistryContext, CoreRoutesContext, CoreScrollTop, CoreSection, CoreSelect, CoreSkeleton, CoreSnackbar, CoreSpan, CoreSpeechToText, CoreStack, CoreSwitch, CoreTab, CoreTabHead, CoreTable, CoreTableBody, CoreTableBodyCell, - CoreTableCell, - CoreNetworkStatus, - CoreTableContainer, + CoreTableCell, CoreTableContainer, CoreTableFooter, CoreTableHead, CoreTableHeadCell, CoreTableHeadRow, CoreTablePagination, CoreTableRow, @@ -333,9 +332,9 @@ export { /** * Themes */ - ThemeSelector, ThreeColumnLayout, toggleMenuItemState, toggleRightMenuState, TwoColumnLayout, urls, useDynamicRefs, UserChip, VCenteredBlankLayout, viewFormattedDate, WEB_PLATFORM, XLargeCoreStyles, - XXLargeCoreStyles, + ThemeSelector, ThreeColumnLayout, toggleMenuItemState, toggleRightMenuState, TwoColumnLayout, urls, useDynamicRefs, // Network status custom hook - useNetworkStatus + useNetworkStatus, UserChip, VCenteredBlankLayout, viewFormattedDate, WEB_PLATFORM, XLargeCoreStyles, + XXLargeCoreStyles }; diff --git a/package/layout/PageContainer.js b/package/layout/PageContainer.js index 1397fbdf..434d0dbe 100644 --- a/package/layout/PageContainer.js +++ b/package/layout/PageContainer.js @@ -7,6 +7,7 @@ import { WrappidDataContext } from "@wrappid/styles"; import { useDispatch, useSelector } from "react-redux"; import CoreDialog from "../components/feedback/CoreDialog"; +import AppContainerLayout from "../components/layouts/_system/AppContainerLayout"; import BlankLayout from "../components/layouts/_system/BlankLayout"; import CoreModal from "../components/utils/CoreModal"; import CoreNetworkStatus from "../components/utils/CoreNetworkStatus"; @@ -125,7 +126,7 @@ export default function PageContainer(props) { if (mergedComponentRegistry[route?.Page?.layout]?.layout) { return route?.Page?.layout; } else { - return (auth?.uid ? defaultAuthenticatedLayout : defaultLayout) || undefined; + return (auth?.uid ? (defaultAuthenticatedLayout || AppContainerLayout.name) : defaultLayout) || BlankLayout; } }; /** diff --git a/package/middleware/coreTokenProvider.js b/package/middleware/coreTokenProvider.js index f759ed25..f1ac9775 100644 --- a/package/middleware/coreTokenProvider.js +++ b/package/middleware/coreTokenProvider.js @@ -1,4 +1,4 @@ -import { globalAccessToken } from "../components/layouts/_system/AppContainerLayout"; +import { globalAccessToken } from "../CoreRoutes"; async function getCoreAccessToken() { try { diff --git a/package/registry/ComponentsRegistry.js b/package/registry/ComponentsRegistry.js index b514844f..5e276301 100644 --- a/package/registry/ComponentsRegistry.js +++ b/package/registry/ComponentsRegistry.js @@ -1,3 +1,6 @@ +// eslint-disable-next-line import/no-unresolved +import { NativeAppContainer } from "@wrappid/native"; + import { coreComponentsRegistry } from "../components/CoreComponentsRegistry"; import PageLoader from "../components/PageLoader"; import ComponentNotFound from "../error/ComponentNotFound"; @@ -23,6 +26,7 @@ let ComponentsRegistry = { Error404 : { comp: Error404 }, Error500 : { comp: Error500 }, LayoutMismatch : { comp: LayoutMismatch }, + NativeAppContainer : { comp: NativeAppContainer }, PageLoader : { comp: PageLoader }, }; diff --git a/package/store/action/appActions.js b/package/store/action/appActions.js index a15694d8..eced01aa 100644 --- a/package/store/action/appActions.js +++ b/package/store/action/appActions.js @@ -1,9 +1,3 @@ -import { - globalAccessToken, - globalRefreshToken, - globalTokenRequestTimeStamp, - globalTokenRequested -} from "../../components/layouts/_system/AppContainerLayout"; import { LOGIN_WITH_OTP_API, LOGIN_WITH_PASSWORD_API, @@ -11,6 +5,12 @@ import { LOGIN_WITH_URL_API } from "../../config/api"; import { HTTP, MESSAGE_TYPE } from "../../config/constants"; +import { + globalAccessToken, + globalRefreshToken, + globalTokenRequested, + globalTokenRequestTimeStamp +} from "../../CoreRoutes"; import { formStore } from "../../layout/PageContainer"; import AppService from "../../service/AppService"; import { reloadToken } from "../../utils/appUtils";