diff --git a/src/config/constants.ts b/src/config/constants.ts
index f1b718b26..44eb014dc 100644
--- a/src/config/constants.ts
+++ b/src/config/constants.ts
@@ -1 +1,5 @@
-export const SETTINGS_TITLE: string = 'Profile Settings'
+export enum ToolTitle {
+ designLib = 'Design Library',
+ settings = 'Profile Settings',
+ work = 'Work',
+}
diff --git a/src/config/environments/environment.dev.config.ts b/src/config/environments/environment.dev.config.ts
index 2b41ce034..5a3256772 100644
--- a/src/config/environments/environment.dev.config.ts
+++ b/src/config/environments/environment.dev.config.ts
@@ -1,10 +1,14 @@
import { GlobalConfig } from '../../lib'
+import { ToolTitle } from '../constants'
import { AppHostEnvironment } from './app-host-environment.enum'
import { EnvironmentConfigDefault } from './environment.default.config'
export const EnvironmentConfigDev: GlobalConfig = {
...EnvironmentConfigDefault,
+ DISABLED_TOOLS: [
+ ToolTitle.designLib,
+ ],
ENV: AppHostEnvironment.dev,
TAG_MANAGER_ID: 'GTM-W7B537Z',
}
diff --git a/src/config/environments/environment.prod.config.ts b/src/config/environments/environment.prod.config.ts
index 14d232096..e6705b611 100644
--- a/src/config/environments/environment.prod.config.ts
+++ b/src/config/environments/environment.prod.config.ts
@@ -1,4 +1,5 @@
import { GlobalConfig } from '../../lib'
+import { ToolTitle } from '../constants'
import { AppHostEnvironment } from './app-host-environment.enum'
import { EnvironmentConfigDefault } from './environment.default.config'
@@ -9,6 +10,9 @@ export const EnvironmentConfigProd: GlobalConfig = {
V3: 'https://api.topcoder.com/v3',
V5: 'https://api.topcoder.com/v5',
},
+ DISABLED_TOOLS: [
+ ToolTitle.designLib,
+ ],
ENV: AppHostEnvironment.prod,
TAG_MANAGER_ID: 'GTM-MXXQHG8',
URL: {
diff --git a/src/header/utility-selectors/UtilitySelector/ProfileSelector/ProfileSelector.tsx b/src/header/utility-selectors/UtilitySelector/ProfileSelector/ProfileSelector.tsx
index 909168150..9dfc37615 100644
--- a/src/header/utility-selectors/UtilitySelector/ProfileSelector/ProfileSelector.tsx
+++ b/src/header/utility-selectors/UtilitySelector/ProfileSelector/ProfileSelector.tsx
@@ -1,6 +1,6 @@
import { FC, useContext } from 'react'
-import { SETTINGS_TITLE } from '../../../../config'
+import { ToolTitle } from '../../../../config'
import { profileContext, ProfileContextData } from '../../../../lib'
import '../../../../lib/styles/index.scss'
@@ -24,7 +24,7 @@ const ProfileSelector: FC<{}> = () => {
return (
{!isLoggedIn &&
}
- {isLoggedIn &&
}
+ {isLoggedIn &&
}
)
}
diff --git a/src/index.tsx b/src/index.tsx
index ecd653f4a..98b14b623 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -3,6 +3,7 @@ import ReactDOM from 'react-dom'
import { BrowserRouter } from 'react-router-dom'
import { default as App } from './App'
+import { EnvironmentConfig } from './config'
import './index.scss'
import { RouteProvider } from './lib'
import reportWebVitals from './reportWebVitals'
@@ -11,7 +12,11 @@ import { UtilsRoutes } from './utils'
ReactDOM.render(
-
+
diff --git a/src/lib/global-config.model.ts b/src/lib/global-config.model.ts
index 3f0ea23c0..5427a8da8 100644
--- a/src/lib/global-config.model.ts
+++ b/src/lib/global-config.model.ts
@@ -3,6 +3,7 @@ export interface GlobalConfig {
V3: string
V5: string
}
+ DISABLED_TOOLS?: Array
ENV: string
LOGGING: {
PUBLIC_TOKEN: string
diff --git a/src/lib/route-provider/route.provider.tsx b/src/lib/route-provider/route.provider.tsx
index f3330a37b..626009866 100644
--- a/src/lib/route-provider/route.provider.tsx
+++ b/src/lib/route-provider/route.provider.tsx
@@ -1,12 +1,15 @@
import { Dispatch, FC, ReactElement, ReactNode, SetStateAction, useEffect, useState } from 'react'
import { Route } from 'react-router-dom'
+import { GlobalConfig } from '../global-config.model'
+
import { PlatformRoute } from './platform-route.model'
import { RouteContextData } from './route-context-data.model'
import { default as routeContext, defaultRouteContextData } from './route.context'
interface RouteProviderProps {
children: ReactNode
+ config: GlobalConfig
toolsRoutes: Array
utilsRoutes: Array
}
@@ -22,9 +25,13 @@ export const RouteProvider: FC = (props: RouteProviderProps)
const getAndSetRoutes: () => void = () => {
+ function routeDisabled(route: PlatformRoute): boolean {
+ return !route.enabled || !!props.config.DISABLED_TOOLS?.includes(route.title)
+ }
+
// TODO: try to make these prop names configurable instead of hard-codded
- const toolsRoutes: Array = props.toolsRoutes.filter(route => route.enabled)
- const utilsRoutes: Array = props.utilsRoutes.filter(route => route.enabled)
+ const toolsRoutes: Array = props.toolsRoutes.filter(route => !routeDisabled(route))
+ const utilsRoutes: Array = props.utilsRoutes.filter(route => !routeDisabled(route))
allRoutes = [
...toolsRoutes,
...utilsRoutes,
@@ -58,8 +65,7 @@ export const RouteProvider: FC = (props: RouteProviderProps)
getAndSetRoutes()
}, [
- props.toolsRoutes,
- props.utilsRoutes,
+ props,
])
return (
diff --git a/src/lib/route-provider/route.utils.ts b/src/lib/route-provider/route.utils.ts
index e206fbc9e..ad09f6287 100644
--- a/src/lib/route-provider/route.utils.ts
+++ b/src/lib/route-provider/route.utils.ts
@@ -1,8 +1,6 @@
-export const routeRoot: string = '/'
+export const routeRoot: string = '/work'
-export const routeIsActive: (activePath: string, pathName: string, rootPath?: string) => boolean
- = (activePath: string, pathName: string, rootPath: string = routeRoot) => {
-
- return activePath?.startsWith(pathName)
- && (pathName !== rootPath || activePath === rootPath)
- }
+export function routeIsActive(activePath: string, pathName: string, rootPath?: string): boolean {
+ return activePath?.startsWith(pathName)
+ && (pathName !== rootPath || activePath === rootPath)
+}
diff --git a/src/tools/design-lib/DesignLib.tsx b/src/tools/design-lib/DesignLib.tsx
index df66fb2b8..ee5a6e913 100644
--- a/src/tools/design-lib/DesignLib.tsx
+++ b/src/tools/design-lib/DesignLib.tsx
@@ -1,9 +1,10 @@
import { FC, useContext } from 'react'
import { Outlet, Routes } from 'react-router-dom'
+import { ToolTitle } from '../../config'
import { ContentLayout, routeContext, RouteContextData } from '../../lib'
-export const toolTitle: string = 'Design Library'
+export const toolTitle: string = ToolTitle.designLib
const DesignLib: FC<{}> = () => {
diff --git a/src/tools/self-service/SelfService.test.tsx b/src/tools/self-service/SelfService.test.tsx
deleted file mode 100644
index 51a4f60d0..000000000
--- a/src/tools/self-service/SelfService.test.tsx
+++ /dev/null
@@ -1,6 +0,0 @@
-import '@testing-library/jest-dom'
-
-describe('', () => {
-
- test('it should render the title prop', () => {})
-})
diff --git a/src/tools/self-service/SelfService.tsx b/src/tools/self-service/SelfService.tsx
deleted file mode 100644
index 22cdd4268..000000000
--- a/src/tools/self-service/SelfService.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-import { FC } from 'react'
-
-import { ContentLayout } from '../../lib'
-
-export const toolTitle: string = 'Self Service'
-
-const SelfService: FC<{}> = () =>
-
-export default SelfService
diff --git a/src/tools/self-service/index.ts b/src/tools/self-service/index.ts
deleted file mode 100644
index cc191ac55..000000000
--- a/src/tools/self-service/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './self-service.routes'
diff --git a/src/tools/self-service/self-service.routes.tsx b/src/tools/self-service/self-service.routes.tsx
deleted file mode 100644
index d00d9c849..000000000
--- a/src/tools/self-service/self-service.routes.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import { PlatformRoute } from '../../lib'
-
-import SelfService, { toolTitle } from './SelfService'
-
-export const selfServiceRoutes: Array = [
- {
- children: [],
- element: ,
- enabled: true,
- route: '/self-service',
- title: toolTitle,
- },
-]
diff --git a/src/tools/tools.routes.ts b/src/tools/tools.routes.ts
index fea3b2049..636ad9826 100644
--- a/src/tools/tools.routes.ts
+++ b/src/tools/tools.routes.ts
@@ -1,15 +1,13 @@
import { PlatformRoute } from '../lib'
import { designLibRoutes } from './design-lib/'
-import { selfServiceRoutes } from './self-service'
-import { workIntakeRoutes } from './work-intake'
+import { workRoutes } from './work'
const toolRoutes: Array = [
// NOTE: these will be displayed in the order they are defined in this array
// TODO: support ordering
+ ...workRoutes,
...designLibRoutes,
- ...selfServiceRoutes,
- ...workIntakeRoutes,
]
export default toolRoutes
diff --git a/src/tools/work-intake/WorkIntake.tsx b/src/tools/work-intake/WorkIntake.tsx
deleted file mode 100644
index 1a84d32a1..000000000
--- a/src/tools/work-intake/WorkIntake.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import { FC } from 'react'
-
-import { ContentLayout, Form } from '../../lib'
-
-import { workIntakeDef } from './work-intake-form.config'
-
-export const toolTitle: string = 'Work'
-
-const WorkIntake: FC<{}> = () => {
-
- function requestGenerator(): any { // TODO
- return {}
- }
-
- function save(): any { // TODO
- return {}
- }
-
- return (
-
-
-
- )
-}
-
-export default WorkIntake
diff --git a/src/tools/work-intake/index.ts b/src/tools/work-intake/index.ts
deleted file mode 100644
index 244e35eb5..000000000
--- a/src/tools/work-intake/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './work-intake.routes'
diff --git a/src/tools/work-intake/work-intake.routes.tsx b/src/tools/work-intake/work-intake.routes.tsx
deleted file mode 100644
index fb515da3b..000000000
--- a/src/tools/work-intake/work-intake.routes.tsx
+++ /dev/null
@@ -1,13 +0,0 @@
-import { PlatformRoute } from '../../lib'
-
-import WorkIntake, { toolTitle } from './WorkIntake'
-
-export const workIntakeRoutes: Array = [
- {
- children: [],
- element: ,
- enabled: true,
- route: '/work-intake',
- title: toolTitle,
- },
-]
diff --git a/src/tools/work/Work.test.tsx b/src/tools/work/Work.test.tsx
new file mode 100644
index 000000000..a59199cd5
--- /dev/null
+++ b/src/tools/work/Work.test.tsx
@@ -0,0 +1,6 @@
+import '@testing-library/jest-dom'
+
+describe('', () => {
+
+ test('it should render the work page', () => {})
+})
diff --git a/src/tools/work/Work.tsx b/src/tools/work/Work.tsx
new file mode 100644
index 000000000..2fddf2183
--- /dev/null
+++ b/src/tools/work/Work.tsx
@@ -0,0 +1,25 @@
+import { FC, useContext } from 'react'
+import { Outlet, Routes } from 'react-router-dom'
+
+import { ToolTitle } from '../../config'
+import { ContentLayout, routeContext, RouteContextData } from '../../lib'
+
+export const toolTitle: string = ToolTitle.work
+
+const Work: FC<{}> = () => {
+
+ const { getChildRoutes }: RouteContextData = useContext(routeContext)
+
+ return (
+
+ <>
+
+
+ {getChildRoutes(toolTitle)}
+
+ >
+
+ )
+}
+
+export default Work
diff --git a/src/tools/work/dashboard/Dashboard.test.tsx b/src/tools/work/dashboard/Dashboard.test.tsx
new file mode 100644
index 000000000..c5f110bee
--- /dev/null
+++ b/src/tools/work/dashboard/Dashboard.test.tsx
@@ -0,0 +1,6 @@
+import '@testing-library/jest-dom'
+
+describe('', () => {
+
+ test('it should render the Dashboard', () => {})
+})
diff --git a/src/tools/work/dashboard/Dashboard.tsx b/src/tools/work/dashboard/Dashboard.tsx
new file mode 100644
index 000000000..05c7c0d29
--- /dev/null
+++ b/src/tools/work/dashboard/Dashboard.tsx
@@ -0,0 +1,19 @@
+import { FC } from 'react'
+import { Link } from 'react-router-dom'
+
+const Dashboard: FC<{}> = () => {
+ return (
+ <>
+
+ Dashboard
+
+
+
+ Create Data Exploration
+
+
+ >
+ )
+}
+
+export default Dashboard
diff --git a/src/tools/work/dashboard/index.ts b/src/tools/work/dashboard/index.ts
new file mode 100644
index 000000000..11753fb6e
--- /dev/null
+++ b/src/tools/work/dashboard/index.ts
@@ -0,0 +1 @@
+export { default as Dashboard } from './Dashboard'
diff --git a/src/tools/work/index.ts b/src/tools/work/index.ts
new file mode 100644
index 000000000..fc0646633
--- /dev/null
+++ b/src/tools/work/index.ts
@@ -0,0 +1 @@
+export * from './work.routes'
diff --git a/src/tools/work-intake/WorkIntake.test.tsx b/src/tools/work/work-intake/WorkIntake.test.tsx
similarity index 55%
rename from src/tools/work-intake/WorkIntake.test.tsx
rename to src/tools/work/work-intake/WorkIntake.test.tsx
index c5c0d7658..51fc99bf9 100644
--- a/src/tools/work-intake/WorkIntake.test.tsx
+++ b/src/tools/work/work-intake/WorkIntake.test.tsx
@@ -2,5 +2,5 @@ import '@testing-library/jest-dom'
describe('', () => {
- test('it should render the title prop', () => {})
+ test('it should render the work intake form', () => {})
})
diff --git a/src/tools/work/work-intake/WorkIntake.tsx b/src/tools/work/work-intake/WorkIntake.tsx
new file mode 100644
index 000000000..dc8a1e546
--- /dev/null
+++ b/src/tools/work/work-intake/WorkIntake.tsx
@@ -0,0 +1,27 @@
+import { FC } from 'react'
+
+import { Form } from '../../../lib'
+
+import { workIntakeDef } from './work-intake-form.config'
+
+const WorkIntake: FC<{}> = () => {
+
+ function requestGenerator(): any { // TODO
+ return {}
+ }
+
+ function save(): any { // TODO
+ return {}
+ }
+
+ return (
+
+ )
+}
+
+export default WorkIntake
diff --git a/src/tools/work/work-intake/index.ts b/src/tools/work/work-intake/index.ts
new file mode 100644
index 000000000..91faffb09
--- /dev/null
+++ b/src/tools/work/work-intake/index.ts
@@ -0,0 +1 @@
+export { default as WorkIntake } from './WorkIntake'
diff --git a/src/tools/work-intake/work-intake-form.config.ts b/src/tools/work/work-intake/work-intake-form.config.ts
similarity index 98%
rename from src/tools/work-intake/work-intake-form.config.ts
rename to src/tools/work/work-intake/work-intake-form.config.ts
index 17f66116c..337b9433e 100644
--- a/src/tools/work-intake/work-intake-form.config.ts
+++ b/src/tools/work/work-intake/work-intake-form.config.ts
@@ -3,7 +3,7 @@ import {
inputOptional,
validatorRequired,
validatorSslUrl,
-} from '../../lib'
+} from '../../../lib'
export const workIntakeDef: FormDefinition = {
buttons: [
diff --git a/src/tools/work/work.routes.tsx b/src/tools/work/work.routes.tsx
new file mode 100644
index 000000000..e5d097007
--- /dev/null
+++ b/src/tools/work/work.routes.tsx
@@ -0,0 +1,32 @@
+import { EnvironmentConfig } from '../../config'
+import { IconOutline, PlatformRoute } from '../../lib'
+
+import { Dashboard } from './dashboard'
+import { default as Work, toolTitle } from './Work'
+import { WorkIntake } from './work-intake'
+
+export const workRoutes: Array = [
+ {
+ children: [
+ {
+ children: [],
+ element: ,
+ enabled: true,
+ icon: IconOutline.MailIcon,
+ route: '',
+ title: 'Home',
+ },
+ {
+ children: [],
+ element: ,
+ enabled: true,
+ route: '/create',
+ title: toolTitle,
+ },
+ ],
+ element: ,
+ enabled: !EnvironmentConfig.DISABLED_TOOLS?.includes(toolTitle),
+ route: '/work',
+ title: toolTitle,
+ },
+]
diff --git a/src/utils/settings/Settings.tsx b/src/utils/settings/Settings.tsx
index bac76aabe..485df367f 100644
--- a/src/utils/settings/Settings.tsx
+++ b/src/utils/settings/Settings.tsx
@@ -3,7 +3,7 @@ import { Dispatch, FC, SetStateAction, useContext, useState } from 'react'
import Modal from 'react-responsive-modal'
import { NavigateFunction, useNavigate } from 'react-router-dom'
-import { SETTINGS_TITLE } from '../../config'
+import { ToolTitle } from '../../config'
import {
authUrlLogin,
Avatar,
@@ -21,6 +21,8 @@ import { PasswordReset } from './password-reset'
import { ProfileUpdate } from './profile-update'
import styles from './Settings.module.scss'
+export const settingsTitle: string = ToolTitle.settings
+
const Settings: FC<{}> = () => {
const profileContextData: ProfileContextData = useContext(profileContext)
@@ -56,7 +58,7 @@ const Settings: FC<{}> = () => {
return (
diff --git a/src/utils/settings/settings.routes.tsx b/src/utils/settings/settings.routes.tsx
index f369b3855..2f815a9c1 100644
--- a/src/utils/settings/settings.routes.tsx
+++ b/src/utils/settings/settings.routes.tsx
@@ -1,7 +1,6 @@
-import { SETTINGS_TITLE } from '../../config'
import { PlatformRoute } from '../../lib'
-import Settings from './Settings'
+import Settings, { settingsTitle } from './Settings'
export const settingsRoutes: Array = [
{
@@ -9,6 +8,6 @@ export const settingsRoutes: Array = [
element: ,
enabled: true,
route: '/settings',
- title: SETTINGS_TITLE,
+ title: settingsTitle,
},
]