Skip to content

Commit c83e21c

Browse files
committed
Consolidate Skills Manager
1 parent c367efe commit c83e21c

File tree

84 files changed

+190
-130
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+190
-130
lines changed

src/apps/admin/src/AdminApp.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Outlet, Routes } from 'react-router-dom'
33

44
import { routerContext, RouterContextData } from '~/libs/core'
55

6-
import { AdminAppContextProvider, Layout, SWRConfigProvider } from './lib'
6+
import { AdminAppContextProvider, LayoutProps, SWRConfigProvider, useLayout } from './lib'
77
import { toolTitle } from './admin-app.routes'
88
import './lib/styles/index.scss'
99

@@ -14,6 +14,7 @@ const AdminApp: FC = () => {
1414
const { getChildRoutes }: RouterContextData = useContext(routerContext)
1515
// eslint-disable-next-line react-hooks/exhaustive-deps -- missing dependency: getChildRoutes
1616
const childRoutes = useMemo(() => getChildRoutes(toolTitle), [])
17+
const { Layout }: { Layout: FC<LayoutProps> } = useLayout()
1718

1819
useEffect(() => {
1920
document.body.classList.add('admin-app')

src/apps/admin/src/admin-app.routes.tsx

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ import {
1212
manageChallengeRouteId,
1313
manageReviewRouteId,
1414
permissionManagementRouteId,
15+
platformRouteId,
1516
rootRoute,
1617
userManagementRouteId,
1718
} from './config/routes.config'
19+
import { platformSkillRouteId } from './platform-management/routes.config'
1820

1921
const AdminApp: LazyLoadedComponent = lazyLoad(() => import('./AdminApp'))
2022

@@ -107,6 +109,17 @@ const PermissionAddGroupMembersPage: LazyLoadedComponent = lazyLoad(
107109
'PermissionAddGroupMembersPage',
108110
)
109111

112+
const PlatformManagement: LazyLoadedComponent = lazyLoad(
113+
() => import('./platform-management/PlatformManagement'),
114+
)
115+
const SkillManagement: LazyLoadedComponent = lazyLoad(
116+
() => import('./platform-management/skill-management/SkillManagement'),
117+
)
118+
const SkillManagementLandingPage: LazyLoadedComponent = lazyLoad(
119+
() => import('./platform-management/skill-management/LandingPage'),
120+
'LandingPage',
121+
)
122+
110123
export const toolTitle: string = ToolTitle.admin
111124

112125
export const adminRoutes: ReadonlyArray<PlatformRoute> = [
@@ -256,6 +269,26 @@ export const adminRoutes: ReadonlyArray<PlatformRoute> = [
256269
id: permissionManagementRouteId,
257270
route: permissionManagementRouteId,
258271
},
272+
// Platform Management Module
273+
{
274+
children: [
275+
{
276+
children: [
277+
{
278+
element: <SkillManagementLandingPage />,
279+
id: 'skills-landing-page',
280+
route: '',
281+
},
282+
],
283+
element: <SkillManagement />,
284+
id: platformSkillRouteId,
285+
route: platformSkillRouteId,
286+
},
287+
],
288+
element: <PlatformManagement />,
289+
id: platformRouteId,
290+
route: platformRouteId,
291+
},
259292
],
260293
domain: AppSubdomain.admin,
261294
element: <AdminApp />,

src/apps/admin/src/config/routes.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ export const manageReviewRouteId = 'review-management'
1313
export const userManagementRouteId = 'user-management'
1414
export const billingAccountRouteId = 'billing-account'
1515
export const permissionManagementRouteId = 'permission-management'
16+
export const platformRouteId = 'platform'

src/apps/admin/src/lib/components/common/Layout/Layout.module.scss

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,24 @@
2020
margin: $sp-8 auto !important;
2121
}
2222

23-
.contantentLayoutInner {
23+
.contentLayoutInner {
2424
box-sizing: border-box;
2525
width: 100%;
2626
}
27+
28+
/* --- PLATFORM SKILLS LAYOUT --- */
29+
30+
.platformSkillsContentLayout {
31+
color: $black-100;
32+
33+
.layout {
34+
.main {
35+
padding: 0 0 $sp-6;
36+
background-color: $tc-white;
37+
38+
@include ltelg {
39+
padding: $sp-4 0;
40+
}
41+
}
42+
}
43+
}
Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1-
import { FC, PropsWithChildren } from 'react'
1+
import { FC, PropsWithChildren, useContext } from 'react'
2+
import cn from 'classnames'
23

34
import { ContentLayout } from '~/libs/ui'
5+
import { routerContext, RouterContextData } from '~/libs/core'
6+
import { platformRouteId } from '~/apps/admin/src/config/routes.config'
7+
import { platformSkillRouteId } from '~/apps/admin/src/platform-management/routes.config'
8+
import { AppSubdomain, EnvironmentConfig } from '~/config'
49

510
import { SystemAdminTabs } from '../Tab'
611

@@ -10,19 +15,53 @@ export const NullLayout: FC<PropsWithChildren> = props => (
1015
<>{props.children}</>
1116
)
1217

13-
export const Layout: FC<PropsWithChildren> = props => (
18+
export type LayoutProps = PropsWithChildren<{
19+
classes?: { // eslint-disable-line react/no-unused-prop-types -- it's actually used
20+
contentClass?: string
21+
innerClass?: string
22+
outerClass?: string
23+
layoutClass?: string
24+
mainClass?: string
25+
}
26+
}>
27+
28+
export const Layout: FC<LayoutProps> = props => (
1429
<ContentLayout
15-
innerClass={styles.contantentLayoutInner}
16-
outerClass={styles.contentLayoutOuter}
30+
contentClass={cn(styles.contentLayout, props.classes?.contentClass)}
31+
innerClass={cn(styles.contentLayoutInner, props.classes?.innerClass)}
32+
outerClass={cn(styles.contentLayoutOuter, props.classes?.outerClass)}
1733
>
18-
<div className={styles.layout}>
34+
<div className={cn(styles.layout, props.classes?.layoutClass)}>
1935
<SystemAdminTabs />
2036

21-
<div className={styles.main}>
37+
<div className={cn(styles.main, props.classes?.mainClass)}>
2238
{props.children}
2339
</div>
2440
</div>
2541
</ContentLayout>
2642
)
2743

44+
export const PlatformManagementSkillsLayout: FC<LayoutProps> = props => (
45+
<Layout classes={{ contentClass: styles.platformSkillsContentLayout }}>
46+
{props.children}
47+
</Layout>
48+
)
49+
50+
export function useLayout(): { Layout: FC<LayoutProps> } {
51+
const routerContextData: RouterContextData = useContext(routerContext)
52+
53+
if (!routerContextData.initialized) return { Layout }
54+
55+
const skillManagementRouteId = EnvironmentConfig.SUBDOMAIN === AppSubdomain.admin
56+
? `/${platformRouteId}/${platformSkillRouteId}`
57+
: `/${AppSubdomain.admin}/${platformRouteId}/${platformSkillRouteId}`
58+
59+
if (window.location.pathname.toLowerCase()
60+
.startsWith(skillManagementRouteId.toLowerCase())) {
61+
return { Layout: PlatformManagementSkillsLayout }
62+
}
63+
64+
return { Layout }
65+
}
66+
2867
export default Layout

src/apps/admin/src/lib/components/common/Tab/config/system-admin-tabs-config.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ import {
66
manageChallengeRouteId,
77
manageReviewRouteId,
88
permissionManagementRouteId,
9+
platformRouteId,
910
userManagementRouteId,
1011
} from '~/apps/admin/src/config/routes.config'
12+
import { platformSkillRouteId } from '~/apps/admin/src/platform-management/routes.config'
1113

1214
export const SystemAdminTabsConfig: TabsNavItem[] = [
1315
{
@@ -50,6 +52,16 @@ export const SystemAdminTabsConfig: TabsNavItem[] = [
5052
id: permissionManagementRouteId,
5153
title: 'Permission Management',
5254
},
55+
{
56+
children: [
57+
{
58+
id: `${platformRouteId}/${platformSkillRouteId}`,
59+
title: 'Skills',
60+
},
61+
],
62+
id: platformRouteId,
63+
title: 'Platform',
64+
},
5365
]
5466

5567
export function getTabIdFromPathName(pathname: string): string {
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { FC, useContext, useMemo } from 'react'
2+
import { Outlet, Routes } from 'react-router-dom'
3+
4+
import { routerContext, RouterContextData } from '~/libs/core'
5+
6+
import { adminRoutes } from '../admin-app.routes'
7+
import { platformRouteId } from '../config/routes.config'
8+
9+
/**
10+
* The router outlet.
11+
*/
12+
export const PlatformManagement: FC = () => {
13+
const childRoutes = useChildRoutes()
14+
15+
return (
16+
<>
17+
<Outlet />
18+
<Routes>{childRoutes}</Routes>
19+
</>
20+
)
21+
}
22+
23+
function useChildRoutes(): Array<JSX.Element> | undefined {
24+
const { getRouteElement }: RouterContextData = useContext(routerContext)
25+
const childRoutes = useMemo(
26+
() => adminRoutes[0].children
27+
?.find(r => r.id === platformRouteId)
28+
?.children?.map(getRouteElement),
29+
[], // eslint-disable-line react-hooks/exhaustive-deps -- missing dependency: getRouteElement
30+
)
31+
return childRoutes
32+
}
33+
34+
export default PlatformManagement
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const platformSkillRouteId = 'skills'

src/apps/skills-manager/src/skills-manager/landing-page/LandingPage.tsx renamed to src/apps/admin/src/platform-management/skill-management/LandingPage/LandingPage.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import { FC } from 'react'
22

3-
import { ContentLayout, InputCheckbox, PageTitle } from '~/libs/ui'
3+
import { InputCheckbox, PageTitle } from '~/libs/ui'
44

5-
import { SkillsManagerContextValue, useSkillsManagerContext } from '../context'
5+
import { SkillsManagerContextValue, useSkillsManagerContext } from '../lib/context'
66
import {
77
CategoriesAccordion,
88
CategoryModal,
99
MoreActionsMenu,
1010
PageHeader,
1111
SearchInput,
1212
SkillModal,
13-
} from '../components'
14-
import { BulkEditor } from '../components/bulk-editor'
13+
} from '../lib/components'
14+
import { BulkEditor } from '../lib/components/bulk-editor'
1515

1616
import styles from './LandingPage.module.scss'
1717

@@ -30,7 +30,7 @@ const LandingPage: FC<{}> = () => {
3030
}: SkillsManagerContextValue = useSkillsManagerContext()
3131

3232
return (
33-
<ContentLayout innerClass={styles.contentWrap}>
33+
<div className={styles.contentWrap}>
3434
<PageTitle>Skills Manager | Admin</PageTitle>
3535
<PageHeader title='Skills Manager'>
3636
<InputCheckbox
@@ -63,7 +63,7 @@ const LandingPage: FC<{}> = () => {
6363
)}
6464

6565
{!!showSkillModal && <SkillModal skill={showSkillModal} />}
66-
</ContentLayout>
66+
</div>
6767
)
6868
}
6969

0 commit comments

Comments
 (0)