{"version":3,"file":"static/js/main.014beccd.js","mappings":"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","sources":["app/env.ts","app/paths.ts","modules/localization/constants.ts","modules/localization/init.ts","app/App.tsx","app/sentry.ts","app/createStore.ts","index.tsx","modules/common/utils.ts","modules/common/hooks.ts","modules/dataFetching/baseCoachServerApi.ts","modules/dataFetching/baseCommunityServerApi.ts","modules/layout/components/Logo.tsx","modules/layout/hooks.ts","modules/layout/components/EmptyNavBar.tsx","modules/layout/components/NavBar.tsx","modules/layout/components/AppLayout.tsx","modules/layout/components/CenteredLayout.tsx","modules/layout/components/ContentWithSidebarLayout.tsx","modules/layout/components/PageLoader.tsx","pages/LoadingPage.tsx","utils/checkIsInApp.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nexport function throwIfNullOrUndefinedInProd(\n input: string | null | undefined,\n paramName: string\n): string {\n if (input != null && input !== undefined) {\n return input;\n }\n if (process.env.NODE_ENV !== \"test\") {\n throw new Error(\n `Expected ${paramName} not to be null or undefined.\\n\\n\n If you are defining an ENV variable, make sure to include the \n \"HIVE_\" prefix so hive-scripts propagates it correctly.\\n\\n`\n );\n } else {\n return \"\";\n }\n}\n\n/**\n * Add any optional environment variables here\n */\nconst OPTIONAL_ENV_VARS_KEYS = [\"SENTRY_ENVIRONMENT\", \"SENTRY_DSN\"] as const;\n\n/**\n * Add any required environment variables here\n */\nconst REQUIRED_ENV_VARS_KEYS = [\n \"ONE_LOGIN_ID\",\n \"AMITY_API_KEY\",\n \"ADMIN_URL\",\n \"COACH_CLIENT_ID\",\n \"COACH_SERVER_URL\",\n \"MIXPANEL_TOKEN\",\n \"MANATEE_URL\",\n \"DASHBOARD_URL\",\n] as const;\n\ntype RequiredEnvVarsType = Record<\n typeof REQUIRED_ENV_VARS_KEYS[number],\n string\n>;\ntype OptionalEnvVarsType = Partial<\n Record<typeof OPTIONAL_ENV_VARS_KEYS[number], string>\n>;\n\ntype ENV_VARIABLES = RequiredEnvVarsType & OptionalEnvVarsType;\n\nconst REQUIRED_ENV_VARIABLES = REQUIRED_ENV_VARS_KEYS.reduce<\n RequiredEnvVarsType\n>((agg, val) => {\n agg[val] = throwIfNullOrUndefinedInProd(\n process.env[`HIVE_${val}`],\n `process.env.HIVE_${val}`\n );\n return agg;\n}, {} as RequiredEnvVarsType);\n\nconst OPTIONAL_ENV_VARIABLES = OPTIONAL_ENV_VARS_KEYS.reduce<\n OptionalEnvVarsType\n>((agg, val) => {\n agg[val] = process.env[`HIVE_${val}`] ?? undefined;\n return agg;\n}, {} as OptionalEnvVarsType);\n\nexport const env: ENV_VARIABLES = {\n ...REQUIRED_ENV_VARIABLES,\n ...OPTIONAL_ENV_VARIABLES,\n};\n","export const paths = {\n newsFeed: \"/\",\n explore: \"/explore\",\n category: \"/category/:categoryId\",\n communityFeed: \"/community/:communityId\",\n communityNew: \"/community/new\",\n communityEdit: \"/community/:communityId/edit\",\n communityPost: \"/community/:communityId/post/:postId\",\n communityComment: \"/community/:communityId/post/:postId/comment/:commentId\",\n userFeed: \"/user/:userId\",\n userEdit: \"/user/:userId/edit\",\n userPost: \"/user/:userId/post/:postId\",\n userComment: \"/user/:userId/post/:postId/comment/:commentId\",\n notifications: \"/notifications\",\n settings: \"/settings\",\n};\n\nexport default paths;\n","export const DEFAULT_LANGUAGES: Record<string, string> = {\n en: \"English\",\n es: \"Español\",\n de: \"Deutsch\",\n};\n\nexport const DEFAULT_NAMESPACES = [\"common\"];\n\nconst isTest = process.env.NODE_ENV === \"test\";\n\nexport const DEFAULT_CONFIG = {\n debug: false,\n initImmediate: false,\n preload: [\"en\"],\n fallbackLng: \"en\",\n whitelist: Object.keys(DEFAULT_LANGUAGES),\n interpolation: {\n escapeValue: false,\n },\n ns: DEFAULT_NAMESPACES,\n defaultNS: DEFAULT_NAMESPACES[0],\n fallbackNS: DEFAULT_NAMESPACES[0],\n backend: {\n loadPath: \"/assets/locales/{{lng}}/{{ns}}.json\",\n },\n detection: {\n lookupQuerystring: \"lang\",\n checkWhitelist: true,\n },\n react: {\n useSuspense: !isTest, // Suspense is consing Enzyme tests to fail\n },\n};\n","/**\n * Translation configuration\n *\n * Copyright (C) 2019D Noom, Inc.\n * @author nikola\n */\n\nimport i18next, { InitOptions } from \"i18next\";\nimport Backend from \"i18next-xhr-backend\";\nimport { initReactI18next } from \"react-i18next\";\nimport LanguageDetector from \"i18next-browser-languagedetector\";\n\nimport { DEFAULT_CONFIG } from \"./constants\";\n\nexport default function init(options: InitOptions = {}) {\n return i18next\n .use(Backend)\n .use(LanguageDetector)\n .use(initReactI18next)\n .init({ ...DEFAULT_CONFIG, ...options });\n}\n","/**\n * Top level component\n *\n * Copyright (C) 2020A Noom, Inc.\n * @author nikola\n */\n\nimport React, { Suspense, ReactElement, lazy } from \"react\";\nimport { Route, Routes, Navigate } from \"react-router-dom\";\nimport {\n LoginCallback,\n Login,\n Logout,\n SecureRoute,\n PublicRoute,\n} from \"@noom/hive-auth\";\nimport {\n extendCompassTheme,\n ThemeProvider,\n CompassColor,\n generateColorPalette,\n} from \"@noom/wax-component-library\";\n\nimport { paths } from \"@app/paths\";\nimport { withSentryRoutes } from \"@app/sentry\";\n\nimport LoadingPage from \"pages/LoadingPage\";\n\nimport { init as init18n } from \"modules/localization\";\ninit18n();\n\nconst AppContainer = lazy(() => import(\"pages/AppContainer\"));\nconst ExplorePage = lazy(() => import(\"pages/ExplorePage\"));\nconst CategoryCommunitiesPage = lazy(() =>\n import(\"pages/CategoryCommunitiesPage\")\n);\nconst CommunityEditPage = lazy(() => import(\"pages/CommunityEditPage\"));\nconst CommunityFeedPage = lazy(() => import(\"pages/CommunityFeedPage\"));\nconst NewsFeedPage = lazy(() => import(\"pages/NewsFeedPage\"));\nconst UserEditPage = lazy(() => import(\"pages/UserEditPage\"));\nconst UserFeedPage = lazy(() => import(\"pages/UserFeedPage\"));\nconst UserPostPage = lazy(() => import(\"pages/UserPostPage\"));\nconst CommunityPostPage = lazy(() => import(\"pages/CommunityPostPage\"));\nconst LoginSelectPage = lazy(() => import(\"pages/LoginSelectPage\"));\nconst LoginFormPage = lazy(() => import(\"pages/LoginFormPage\"));\nconst SettingsPage = lazy(() => import(\"pages/SettingsPage\"));\n\nconst theme = extendCompassTheme({\n styles: {\n global: {\n \".rdt.top .rdtPicker\": {\n top: \"auto\",\n bottom: \"100%\",\n },\n \"html, body\": {\n bg: \"#F6F4EE\",\n fontSize: \"14px\",\n },\n \"html, body, #root\": {\n minH: \"100vh\",\n },\n \"body > iframe\": {\n display: \"none\",\n },\n \"body, #root\": {\n minH: \"85vh\",\n },\n },\n },\n\n sizes: {\n container: {\n \"2xl\": \"1440px\",\n },\n },\n\n shadows: {\n outline: `0 0 0 2px ${CompassColor.tarocco}`,\n },\n\n colors: {\n secondary: generateColorPalette(CompassColor.lagoon),\n },\n\n components: {\n Heading: {\n baseStyle: {\n fontWeight: \"bold\",\n },\n sizes: {\n xxl: {\n fontSize: \"2.5rem\",\n },\n xl: {\n fontSize: \"2rem\",\n },\n lg: {\n fontSize: \"1.5rem\",\n },\n },\n },\n },\n});\n\nconst SentryRoutes = withSentryRoutes(Routes);\n\nexport type AppProps = {\n amityApiKey: string;\n amityApiRegion: string;\n amityApiEndpoint: string;\n adminPanelUrl: string;\n};\n\nexport function App({\n amityApiRegion,\n amityApiEndpoint,\n amityApiKey,\n adminPanelUrl,\n}: AppProps): ReactElement {\n return (\n <ThemeProvider resetCSS theme={theme}>\n <Suspense fallback={<LoadingPage />}>\n <SentryRoutes>\n <Route\n path=\"/login\"\n element={\n <PublicRoute>\n <LoginSelectPage />\n </PublicRoute>\n }\n />\n <Route path=\"/login/sso\" element={<Login />} />\n <Route\n path=\"/login/form\"\n element={\n <PublicRoute>\n <LoginFormPage />\n </PublicRoute>\n }\n />\n <Route path=\"/login/callback\" element={<LoginCallback />} />\n <Route path=\"/logout\" element={<Logout />} />\n\n {/* Any components that require authentication should be wrapped in a SecureRoute */}\n <Route\n path=\"/*\"\n element={\n <SecureRoute>\n <AppContainer\n apiKey={amityApiKey}\n apiRegion={amityApiRegion}\n apiEndpoint={amityApiEndpoint}\n adminPanelUrl={adminPanelUrl}\n >\n <Routes>\n <Route path={paths.explore} element={<ExplorePage />} />\n <Route\n path={paths.category}\n element={<CategoryCommunitiesPage />}\n />\n\n <Route\n path={paths.communityFeed}\n element={<CommunityFeedPage />}\n />\n <Route\n path={paths.communityEdit}\n element={<CommunityEditPage />}\n />\n\n <Route path={paths.userFeed} element={<UserFeedPage />} />\n <Route path={paths.userEdit} element={<UserEditPage />} />\n <Route path={paths.newsFeed} element={<NewsFeedPage />} />\n\n <Route path={paths.userPost} element={<UserPostPage />} />\n <Route\n path={paths.userComment}\n element={<UserPostPage />}\n />\n <Route\n path={paths.communityPost}\n element={<CommunityPostPage />}\n />\n <Route\n path={paths.communityComment}\n element={<CommunityPostPage />}\n />\n\n <Route path={paths.settings} element={<SettingsPage />} />\n\n <Route\n path=\"*\"\n element={<Navigate to={paths.newsFeed} />}\n />\n </Routes>\n </AppContainer>\n </SecureRoute>\n }\n />\n </SentryRoutes>\n </Suspense>\n </ThemeProvider>\n );\n}\n","import React, { useEffect } from \"react\";\nimport * as Sentry from \"@sentry/react\";\nimport { BrowserTracing } from \"@sentry/tracing\";\nimport {\n useLocation,\n useNavigationType,\n createRoutesFromChildren,\n matchRoutes,\n} from \"react-router-dom\";\n\nexport type SentryConfig = {\n dsn: string;\n environment?: string;\n tracesSampleRate?: number;\n};\n\nexport function initSentry(config: SentryConfig) {\n const { dsn, environment = \"development\", tracesSampleRate = 1.0 } = config;\n\n Sentry.init({\n // The DSN tells the SDK where to send the events.\n dsn,\n\n // List of included Sentry integrations\n integrations: [\n new BrowserTracing({\n routingInstrumentation: Sentry.reactRouterV6Instrumentation(\n useEffect,\n useLocation,\n useNavigationType,\n createRoutesFromChildren,\n matchRoutes\n ),\n }),\n\n new Sentry.Integrations.Breadcrumbs({\n console: true,\n xhr: true,\n fetch: true,\n sentry: true,\n dom: {\n serializeAttribute: [\"data-qa-anchor\", \"id\", \"class\"],\n },\n }),\n ],\n\n // Sets the environment. This string is freeform and not set by default. (think staging vs production or similar).\n environment,\n\n // A number between 0 and 1, controlling the percentage chance a given transaction will be sent to Sentry.\n // (0 represents 0% while 1 represents 100%.) Applies equally to all transactions created in the app.\n tracesSampleRate,\n\n // A list of strings or regex patterns that match error URLs which should exclusively be sent to Sentry.\n // By default, all errors will be sent. This is a \"contains\" match to the entire file URL.\n denyUrls: [/api-js\\.mixpanel\\.com/i],\n });\n}\n\nexport function withSentryRoutes(routesElement: React.FC) {\n return Sentry.withSentryReactRouterV6Routing(routesElement);\n}\n","import { createStore, combineReducers } from \"@noom/hive-core\";\n\nimport {\n baseCoachServerApi,\n baseCommunityServerApi,\n} from \"modules/dataFetching\";\n\nconst rootReducer = combineReducers({\n [baseCoachServerApi.reducerPath]: baseCoachServerApi.reducer,\n [baseCommunityServerApi.reducerPath]: baseCommunityServerApi.reducer,\n});\n\nconst middleware = [\n baseCoachServerApi.middleware,\n baseCommunityServerApi.middleware,\n];\n\ntype CombinedState = ReturnType<typeof rootReducer>;\n\n// App store declared globally so it can be referenced anywhere\n// without cycle imports\ndeclare global {\n export type AppState = CombinedState;\n}\n\nexport default function create() {\n return createStore({\n rootReducer,\n middleware,\n includeLoggerInDevelopment: false,\n });\n}\n","/**\n * Main front end point of entry.\n *\n * Copyright (C) 2018D Noom, Inc.\n * @author hubert\n */\n\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\n\nimport { BrowserRouter } from \"react-router-dom\";\nimport { AuthContext, CSExtras } from \"@noom/hive-auth\";\nimport { Provider as ReduxStoreProvider } from \"@noom/hive-react\";\nimport { LoaderView } from \"@noom/wax-component-library\";\nimport { ApiRegion, ApiEndpoint } from \"@noom/community-web-uikit\";\nimport { MixpanelLogger } from \"@noom/hive-analytics\";\n\nimport { App } from \"@app/App\";\nimport createStore from \"@app/createStore\";\nimport { initSentry } from \"@app/sentry\";\nimport { env } from \"@app/env\";\n\n// Fix for the focus outline\nimport \"focus-visible/dist/focus-visible\";\n\nconst apiRegion = ApiRegion.US;\nconst apiEndpoint = ApiEndpoint.US;\n\nconst clientId = env.ONE_LOGIN_ID;\nconst apiKey = env.AMITY_API_KEY;\nconst adminPanelUrl = env.ADMIN_URL;\nconst csClientId = env.COACH_CLIENT_ID;\nconst csServerUrl = env.COACH_SERVER_URL;\nconst mixpanelToken = env.MIXPANEL_TOKEN;\nconst isDev = process.env.NODE_ENV === \"development\";\n\nconst sentryEnvironment = env.SENTRY_ENVIRONMENT;\nconst sentryDsn = env.SENTRY_DSN;\n\nconst csExtras: CSExtras = {\n packageName: \"com.noom.web.community\",\n};\n\nif (sentryDsn) {\n initSentry({\n dsn: sentryDsn,\n environment: sentryEnvironment,\n tracesSampleRate: 0.2,\n });\n}\n\nconst store = createStore();\n\n// Render the app\nReactDOM.render(\n <ReduxStoreProvider store={store}>\n <MixpanelLogger token={mixpanelToken} isDev={isDev}>\n <BrowserRouter>\n <AuthContext\n useCSAuth\n useAutoCookieAuth\n csExtras={csExtras}\n clientId={clientId}\n fallback={<LoaderView />}\n csClientId={csClientId}\n csServerUrl={csServerUrl}\n autoCookieName=\"autologin_data\"\n >\n <App\n amityApiKey={apiKey}\n amityApiRegion={apiRegion}\n amityApiEndpoint={apiEndpoint}\n adminPanelUrl={adminPanelUrl}\n />\n </AuthContext>\n </BrowserRouter>\n </MixpanelLogger>\n </ReduxStoreProvider>,\n document.getElementById(\"root\")\n);\n","import qs from \"query-string\";\n\nexport function formatPath(\n path: string,\n pathParams: Record<string, string | undefined> = {},\n queryParams: Record<string, string | boolean | undefined> = {},\n hash = \"\"\n) {\n let newPath = path;\n Object.keys(pathParams).forEach((key) => {\n newPath = newPath.replace(`:${key}`, pathParams[key] ?? \"\");\n });\n\n if (Object.keys(queryParams).length) {\n newPath += `?${qs.stringify(queryParams)}`;\n }\n\n if (hash) {\n newPath += `#${hash}`;\n }\n\n return newPath;\n}\n","import { useCallback, useMemo } from \"react\";\nimport { matchPath, useLocation, PathMatch } from \"react-router-dom\";\n\nimport { formatPath } from \"./utils\";\n\nasync function copyTextToClipboard(text: string) {\n window.NativeAndroid?.copyToClipboard(text);\n navigator.clipboard.writeText(text);\n}\n\n/** Copy full post and comment path to clipboard */\nexport function useCopyPath(paths: {\n userPost: string;\n userComment: string;\n communityPost: string;\n communityComment: string;\n}) {\n const handleCopyPostPath = useCallback(\n (post: any) => {\n const path =\n window.location.origin +\n formatPath(\n post.targetType === \"community\"\n ? paths.communityPost\n : paths.userPost,\n {\n userId: post.postedUserId,\n communityId: post.targetId,\n postId: post.postId,\n }\n );\n\n copyTextToClipboard(path);\n },\n [paths]\n );\n\n const handleCopyCommentPath = useCallback(\n (comment: any) => {\n const communityId = /community\\/(\\w+)\\/post/.exec(comment.path)?.[1];\n\n const path =\n window.location.origin +\n formatPath(communityId ? paths.communityComment : paths.userComment, {\n userId: comment.userId,\n communityId,\n postId: comment.referenceId,\n commentId: comment.commentId,\n });\n copyTextToClipboard(path);\n },\n [paths]\n );\n\n return {\n handleCopyPostPath,\n handleCopyCommentPath,\n };\n}\n\n/** Get current route information */\nexport function useActiveRoute(\n appRoutes: Record<string, string>\n):\n | (PathMatch & { key: string; userId?: string; communityId?: string })\n | undefined {\n const location = useLocation();\n const routeData = useMemo(() => {\n // eslint-disable-next-line no-restricted-syntax\n for (const key of Object.keys(appRoutes)) {\n const match = matchPath(\n appRoutes[key as keyof typeof appRoutes],\n location.pathname\n );\n\n if (match) {\n return {\n ...match,\n key,\n userId: match.params?.userId,\n communityId: match.params?.communityId,\n };\n }\n }\n\n return undefined;\n }, [location.pathname, appRoutes]);\n\n return routeData;\n}\n","import { getActiveUser } from \"@noom/hive-auth\";\nimport { baseQuery } from \"@noom/hive-core\";\nimport { createApi } from \"@noom/hive-react\";\n\nexport const baseCoachServerApi = createApi({\n reducerPath: \"coachServerApi\",\n baseQuery: baseQuery({\n baseURL: process.env.HIVE_COACH_SERVER_URL,\n prepareHeaders: () => {\n return {\n Authorization: `Bearer ${getActiveUser()?.accessToken}`,\n };\n },\n }),\n endpoints: () => ({}),\n});\n","import { getActiveUser } from \"@noom/hive-auth\";\nimport { baseQuery } from \"@noom/hive-core\";\nimport { createApi } from \"@noom/hive-react\";\n\nexport const baseCommunityServerApi = createApi({\n reducerPath: \"communityServerApi\",\n baseQuery: baseQuery({\n baseURL: process.env.HIVE_COMMUNITY_SERVER_URL,\n prepareHeaders: () => {\n return {\n Authorization: `Bearer ${getActiveUser()?.accessToken}`,\n };\n },\n }),\n endpoints: () => ({}),\n});\n","import React from \"react\";\nimport { StyleProps, Image } from \"@noom/wax-component-library\";\n\nexport function Logo({\n onClick,\n ...style\n}: StyleProps & { onClick?: () => void }) {\n return (\n <>\n <Image\n src=\"/assets/img/noom-logo-icon.jpg\"\n onClick={onClick}\n cursor={onClick ? \"pointer\" : \"auto\"}\n w=\"30px\"\n h=\"30px\"\n p={0}\n {...style}\n />\n <Image\n src=\"/assets/img/noom-logo.jpeg\"\n onClick={onClick}\n cursor={onClick ? \"pointer\" : \"auto\"}\n w=\"110px\"\n h=\"24px\"\n p={0}\n paddingLeft={2}\n {...style}\n />\n </>\n );\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect } from \"react\";\nimport { useBreakpointValue, Spacing } from \"@noom/wax-component-library\";\n\ntype SidebarType = \"drawer\" | \"sticky\";\n\nexport function useSidebarType(): SidebarType {\n return useBreakpointValue({\n base: \"drawer\",\n lg: \"sticky\",\n }) as SidebarType;\n}\n\nexport function useContainerPadding(): number {\n return useBreakpointValue({ base: 1, md: 4 }) as number;\n}\n\nexport function useMinimizedComponent(): boolean {\n return useBreakpointValue({ base: true, md: false }) as boolean;\n}\n\nexport function useNavbarHeight(): number {\n return useBreakpointValue({ base: Spacing[16], md: Spacing[12] }) as number;\n}\n\nexport function useScrollTop(\n viewId?: string,\n elementId?: string,\n scrollToElementTimeout = 1000\n) {\n // Convert spacing to pixels\n const navBar = (useNavbarHeight() / 5) * 16;\n\n useEffect(() => {\n window.scroll({\n top: 0,\n left: 0,\n });\n\n if (elementId) {\n setTimeout(() => {\n const elementTop =\n document.getElementById(elementId.replace(\"#\", \"\"))?.offsetTop ?? 0;\n if (elementTop) {\n window.scroll({\n top: elementTop - navBar,\n left: 0,\n });\n }\n }, scrollToElementTimeout);\n }\n }, [viewId, elementId]);\n}\n","import React, { ReactElement, ReactNode } from \"react\";\nimport {\n Box,\n Container,\n Icon,\n IconButton,\n Text,\n} from \"@noom/wax-component-library\";\n\nimport { isWebview } from \"utils/checkIsInApp\";\nimport { Logo } from \"./Logo\";\nimport { useSidebarType } from \"../hooks\";\n\nexport type EmptyNavBarProps = {\n children?: ReactNode;\n showNavigationMenu?: boolean;\n onLogoClick?: () => void;\n onNavigationMenuClick?: () => void;\n displayPathName?: string;\n};\n\nexport function EmptyNavBar({\n onLogoClick,\n children,\n showNavigationMenu,\n onNavigationMenuClick,\n displayPathName,\n}: EmptyNavBarProps): ReactElement {\n const navigationType = useSidebarType();\n\n return (\n <Box boxSizing=\"border-box\" h=\"100%\">\n <Container\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n maxW=\"container.xl\"\n h=\"100%\"\n paddingX={0}\n >\n {!isWebview() ? (\n <Box display=\"flex\" alignItems=\"center\">\n {showNavigationMenu && navigationType === \"drawer\" && (\n <IconButton\n h=\"100%\"\n onClick={onNavigationMenuClick}\n icon={!isWebview() ? \"hamburger\" : \"chevron-down\"}\n bg=\"transparent\"\n data-qa-anchor=\"hamburger-menu-button\"\n />\n )}\n <Logo data-testid=\"logo-component\" ml={2} onClick={onLogoClick} />\n </Box>\n ) : (\n <Box\n display=\"flex\"\n alignItems=\"center\"\n ml={2}\n fontWeight=\"500\"\n fontSize=\"18px\"\n onClick={onNavigationMenuClick}\n >\n {displayPathName && <Text>{displayPathName} </Text>}\n {showNavigationMenu && navigationType === \"drawer\" && (\n <Icon ml={0} icon=\"chevron-down\" data-qa-anchor=\"menu-button\" />\n )}\n </Box>\n )}\n\n <Box display=\"flex\" alignItems=\"center\">\n {children}\n </Box>\n </Container>\n </Box>\n );\n}\n","import React, { ReactElement, ReactNode, useMemo } from \"react\";\nimport { ButtonGroup } from \"@noom/wax-component-library\";\n\nimport { useActiveRoute } from \"@modules/common\";\nimport { paths } from \"@app/paths\";\nimport { useAmityMyCommunitiesList } from \"@noom/community-web-uikit\";\nimport { useTranslation } from \"react-i18next\";\nimport { EmptyNavBar, EmptyNavBarProps } from \"./EmptyNavBar\";\n\nexport type NavBarProps = {\n children?: ReactNode;\n} & EmptyNavBarProps;\ninterface Community {\n communityId: string;\n displayName: string;\n}\nexport function NavBar({\n onLogoClick,\n children,\n showNavigationMenu,\n onNavigationMenuClick,\n}: NavBarProps): ReactElement {\n const { t } = useTranslation();\n const routeData = useActiveRoute(paths);\n const [communities = []] = useAmityMyCommunitiesList();\n const displayPathName = useMemo(() => {\n if (routeData?.communityId !== undefined && routeData?.communityId !== \"\") {\n if (Array.isArray(communities)) {\n return (\n (communities as Community[]).find(\n (community) => community.communityId === routeData?.communityId\n )?.displayName || \"\"\n );\n }\n }\n return routeData && routeData.key ? t(`${routeData.key}`) : \"\";\n }, [communities, routeData, t]);\n return (\n <EmptyNavBar\n showNavigationMenu={showNavigationMenu}\n onLogoClick={onLogoClick}\n onNavigationMenuClick={onNavigationMenuClick}\n displayPathName={displayPathName}\n >\n <ButtonGroup size=\"sm\" colorScheme=\"gray\" variant=\"link\" spacing={4}>\n {children}\n </ButtonGroup>\n </EmptyNavBar>\n );\n}\n","import React, { ReactNode } from \"react\";\nimport { Box, Container, GlobalStyle } from \"@noom/wax-component-library\";\n\nimport { useContainerPadding, useNavbarHeight } from \"../hooks\";\n\nexport type AppLayoutProps = {\n navBar?: ReactNode;\n hideReCaptchaBadge?: boolean;\n children: ReactNode;\n};\n\nexport function AppLayout({\n children,\n navBar,\n hideReCaptchaBadge,\n}: AppLayoutProps) {\n const padding = useContainerPadding();\n const navbarHeight = useNavbarHeight();\n\n return (\n <Box display=\"flex\" flexDir=\"column\" minH=\"85vh\">\n <Box\n top={0}\n width=\"100%\"\n position=\"fixed\"\n zIndex=\"sticky\"\n bg=\"white\"\n boxShadow=\"sm\"\n height={navbarHeight}\n paddingX={padding}\n >\n {navBar}\n </Box>\n <Container\n flex={1}\n centerHorizontal\n w=\"100%\"\n maxW=\"container.xl\"\n pt={navbarHeight}\n paddingX={padding}\n boxSizing=\"border-box\"\n >\n {children}\n </Container>\n\n {hideReCaptchaBadge ? (\n <GlobalStyle\n styles={{\n \".grecaptcha-badge\": {\n visibility: \"hidden\",\n },\n }}\n />\n ) : null}\n </Box>\n );\n}\n","import React, { ReactNode } from \"react\";\nimport { Box } from \"@noom/wax-component-library\";\n\nexport type CenteredLayoutProps = {\n children: ReactNode;\n centerVertical?: boolean;\n};\n\nexport function CenteredLayout({\n children,\n centerVertical,\n}: CenteredLayoutProps) {\n return (\n <Box\n display=\"flex\"\n maxW=\"container.2xl\"\n w=\"100%\"\n pt={12}\n paddingX={4}\n justifyContent=\"center\"\n alignItems={centerVertical ? \"center\" : \"start\"}\n >\n {children}\n </Box>\n );\n}\n","import React, { ReactNode, PropsWithChildren, memo } from \"react\";\nimport {\n Box,\n Stack,\n Drawer,\n DrawerBody,\n DrawerContent,\n DrawerOverlay,\n DrawerProps,\n DrawerHeader,\n IconButton,\n} from \"@noom/wax-component-library\";\n\nimport { isWebview } from \"utils/checkIsInApp\";\nimport { Logo } from \"./Logo\";\nimport { useSidebarType, useContainerPadding, useNavbarHeight } from \"../hooks\";\n\nfunction LayoutDrawer({\n children,\n isOpen,\n onClose,\n placement,\n showLogo,\n}: PropsWithChildren<Pick<DrawerProps, \"isOpen\" | \"onClose\" | \"placement\">> & {\n showLogo?: boolean;\n}) {\n const navbarHeight = useNavbarHeight();\n\n return (\n <Drawer\n isOpen={isOpen}\n onClose={onClose}\n placement={placement}\n autoFocus={false}\n >\n <DrawerOverlay />\n <DrawerContent transform=\"none !important\">\n {showLogo && (\n <DrawerHeader\n h={navbarHeight}\n p={2}\n display=\"flex\"\n alignItems=\"center\"\n flexDir=\"row\"\n >\n <IconButton\n h=\"100%\"\n onClick={onClose}\n icon=\"close\"\n bg=\"transparent\"\n />\n {!isWebview() && <Logo ml={2} />}\n </DrawerHeader>\n )}\n <DrawerBody\n paddingX={4}\n css={{ \"> div\": { width: \"100%\", paddingTop: 0 } }}\n >\n {children}\n </DrawerBody>\n </DrawerContent>\n </Drawer>\n );\n}\n\nconst MemoLayoutDrawer = memo(LayoutDrawer);\n\nexport type ContentWithSidebarLayoutProps = {\n asideLeft: ReactNode;\n asideRight?: ReactNode;\n children: ReactNode;\n isLeftDrawerOpen?: boolean;\n onLeftDrawerClose: () => void;\n};\n\nexport function ContentWithSidebarLayout({\n children,\n asideLeft,\n asideRight,\n isLeftDrawerOpen = false,\n onLeftDrawerClose,\n}: ContentWithSidebarLayoutProps) {\n const sidebar = useSidebarType();\n const padding = useContainerPadding();\n const navbarHeight = useNavbarHeight();\n\n return (\n <Stack\n maxW=\"container.2xl\"\n w=\"100%\"\n isInline\n spacing={4}\n shouldWrapChildren={false}\n >\n {sidebar === \"sticky\" ? (\n <Box position=\"relative\" w={[0, 0, 0, 280, 280]}>\n <Box position=\"fixed\" h=\"100vh\" pb={navbarHeight} zIndex=\"sticky\">\n {asideLeft}\n </Box>\n </Box>\n ) : (\n <MemoLayoutDrawer\n showLogo\n isOpen={isLeftDrawerOpen}\n onClose={onLeftDrawerClose}\n placement=\"left\"\n >\n {asideLeft}\n </MemoLayoutDrawer>\n )}\n\n <Box\n pt={padding * 2}\n flex={1}\n minW={0}\n css={\n sidebar === \"drawer\" && {\n \"> div\": { width: \"100%\", maxWidth: \"initial\" },\n }\n }\n >\n {children}\n </Box>\n {asideRight && (\n <Box w={[0, 0, 0, 0, 280]}>\n <Box position=\"fixed\" h=\"100vh\" pb={navbarHeight} zIndex=\"sticky\">\n {asideRight}\n </Box>\n </Box>\n )}\n </Stack>\n );\n}\n","import React from \"react\";\nimport { Container, ClientLoader } from \"@noom/wax-component-library\";\n\nexport function PageLoader() {\n return (\n <Container centerHorizontal centerVertical>\n <ClientLoader size=\"lg\" />\n </Container>\n );\n}\n","import React from \"react\";\nimport { useNavigate } from \"react-router-dom\";\n\nimport { AppLayout, EmptyNavBar, PageLoader } from \"modules/layout\";\n\nexport default function LoaderPage() {\n const navigate = useNavigate();\n\n return (\n <AppLayout navBar={<EmptyNavBar onLogoClick={() => navigate(\"/\")} />}>\n <PageLoader />\n </AppLayout>\n );\n}\n","export const isWebview = () => {\n const { navigator }: any = window;\n const { userAgent } = navigator;\n const normalizedUserAgent = userAgent.toLowerCase();\n const { standalone } = navigator;\n\n const isIos =\n /ip(ad|hone|od)/.test(normalizedUserAgent) ||\n (navigator.platform === \"MacIntel\" && navigator.maxTouchPoints > 1);\n const isAndroid = /android/.test(normalizedUserAgent);\n const isSafari = /safari/.test(normalizedUserAgent);\n return (\n (isAndroid && /; wv\\)/.test(normalizedUserAgent)) ||\n (isIos && !standalone && !isSafari)\n );\n};\n"],"names":["REQUIRED_ENV_VARIABLES","reduce","agg","val","input","paramName","undefined","Error","throwIfNullOrUndefinedInProd","OPTIONAL_ENV_VARIABLES","env","paths","newsFeed","explore","category","communityFeed","communityNew","communityEdit","communityPost","communityComment","userFeed","userEdit","userPost","userComment","notifications","settings","DEFAULT_NAMESPACES","DEFAULT_CONFIG","debug","initImmediate","preload","fallbackLng","whitelist","Object","keys","en","es","de","interpolation","escapeValue","ns","defaultNS","fallbackNS","backend","loadPath","detection","lookupQuerystring","checkWhitelist","react","useSuspense","options","i18next","use","init","routesElement","AppContainer","lazy","ExplorePage","CategoryCommunitiesPage","CommunityEditPage","CommunityFeedPage","NewsFeedPage","UserEditPage","UserFeedPage","UserPostPage","CommunityPostPage","LoginSelectPage","LoginFormPage","SettingsPage","theme","styles","global","top","bottom","bg","fontSize","minH","display","sizes","container","shadows","outline","tarocco","colors","secondary","lagoon","components","Heading","baseStyle","fontWeight","xxl","xl","lg","SentryRoutes","rootReducer","reducerPath","reducer","middleware","apiRegion","US","apiEndpoint","clientId","ONE_LOGIN_ID","apiKey","AMITY_API_KEY","adminPanelUrl","ADMIN_URL","csClientId","COACH_CLIENT_ID","csServerUrl","COACH_SERVER_URL","mixpanelToken","MIXPANEL_TOKEN","sentryEnvironment","SENTRY_ENVIRONMENT","sentryDsn","SENTRY_DSN","config","dsn","environment","tracesSampleRate","integrations","routingInstrumentation","useEffect","Breadcrumbs","console","xhr","fetch","sentry","dom","serializeAttribute","denyUrls","initSentry","store","includeLoggerInDevelopment","MixpanelLogger","token","isDev","BrowserRouter","useCSAuth","useAutoCookieAuth","csExtras","packageName","fallback","autoCookieName","amityApiRegion","amityApiEndpoint","amityApiKey","resetCSS","Suspense","LoadingPage","path","element","to","document","getElementById","formatPath","pathParams","queryParams","hash","newPath","forEach","key","replace","length","copyTextToClipboard","text","window","NativeAndroid","copyToClipboard","navigator","clipboard","writeText","useCopyPath","handleCopyPostPath","useCallback","post","location","origin","targetType","userId","postedUserId","communityId","targetId","postId","handleCopyCommentPath","comment","exec","referenceId","commentId","useActiveRoute","appRoutes","useMemo","match","pathname","params","baseCoachServerApi","baseQuery","baseURL","prepareHeaders","Authorization","accessToken","endpoints","baseCommunityServerApi","Logo","onClick","style","src","cursor","w","h","p","paddingLeft","useSidebarType","base","useContainerPadding","md","useMinimizedComponent","useNavbarHeight","useScrollTop","viewId","elementId","scrollToElementTimeout","navBar","scroll","left","setTimeout","elementTop","offsetTop","EmptyNavBar","onLogoClick","children","showNavigationMenu","onNavigationMenuClick","displayPathName","navigationType","boxSizing","justifyContent","alignItems","maxW","paddingX","ml","icon","NavBar","t","useTranslation","routeData","communities","Array","isArray","find","community","displayName","size","colorScheme","variant","spacing","AppLayout","hideReCaptchaBadge","padding","navbarHeight","flexDir","width","position","zIndex","boxShadow","height","flex","centerHorizontal","pt","visibility","CenteredLayout","centerVertical","MemoLayoutDrawer","memo","isOpen","onClose","placement","showLogo","autoFocus","transform","css","paddingTop","ContentWithSidebarLayout","asideLeft","asideRight","isLeftDrawerOpen","onLeftDrawerClose","sidebar","isInline","shouldWrapChildren","pb","minW","maxWidth","PageLoader","LoaderPage","navigate","isWebview","normalizedUserAgent","toLowerCase","standalone","isIos","test","platform","maxTouchPoints","isAndroid","isSafari"],"sourceRoot":""}