Skip to content
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
53a4912
Initial work-manager port work
jmgasper Feb 11, 2026
3c3451d
UI and bug fixes
jmgasper Feb 12, 2026
6cfb37c
Additional UI and usbility tweaks for work manager port to platform-ui
jmgasper Feb 13, 2026
a6cc139
Merge branch 'dev' of github.com:topcoder-platform/platform-ui into w…
jmgasper Feb 18, 2026
caa121c
Merge with latest from dev
jmgasper Feb 18, 2026
468bc7e
Bunch of usability fixes, bug fixes, and new functionality added to m…
jmgasper Feb 19, 2026
57cf4c5
UI fixes for work and copilots apps for projects-api-v6
jmgasper Feb 20, 2026
078871a
Little fixes for issues found during validation testing.
jmgasper Feb 20, 2026
720400d
Fix issue with launch non design challenges
jmgasper Feb 20, 2026
7bc3fc4
UI updates for bugs noted in work app
jmgasper Feb 20, 2026
65a144d
UI updates for project filters
jmgasper Feb 20, 2026
5472ae2
QA bug fixes - PM3936-41
jmgasper Feb 20, 2026
dc87772
Additional QA fixes
jmgasper Feb 20, 2026
eb60a13
QA updates https://topcoder.atlassian.net/browse/PM-3933
jmgasper Feb 21, 2026
fe2435c
Remove redundant artifact buttons
jmgasper Feb 21, 2026
c9b1f97
Dev vs. prod path normalization
jmgasper Feb 22, 2026
94d681f
NDA and reviewer updates
jmgasper Feb 22, 2026
75ea1d2
PM-2645: fix tools add flow action selection
jmgasper Feb 22, 2026
5e9962c
PM-2346: Restrict admin payment type to valid values
jmgasper Feb 22, 2026
3c1dc2a
PM-1839: add fun challenge checkbox in work app
jmgasper Feb 22, 2026
938edc2
PM-1352: Restrict Work Manager to explicit roles
jmgasper Feb 22, 2026
7ae2767
PM-1643: add Wipro Allowed checkbox and payload mapping
jmgasper Feb 22, 2026
c9999b3
PM-2637: preserve topgear phase start times on save
jmgasper Feb 22, 2026
bb9429b
PM-2572: fix screening pass/fail selection for multi-screener challenges
jmgasper Feb 22, 2026
7d0de9d
PM-2515: fix approval tab and winners gating for failed approvals
jmgasper Feb 22, 2026
ea9be07
PM-2504: show completed approvals for non-submitter review roles
jmgasper Feb 22, 2026
2abcde2
PM-2459: Exclude screening-failed submissions from review progress
jmgasper Feb 22, 2026
606ebd8
PM-3000: Fix Review UI challenge link in system admin
jmgasper Feb 22, 2026
714fa80
PM-2691: handle legacy contest submission type formats
jmgasper Feb 22, 2026
a3ecbab
PM-3167: fix registration reopen eligibility during submission
jmgasper Feb 22, 2026
ea67ae1
PM-3206: improve wallet and wallet-admin mobile responsiveness
jmgasper Feb 22, 2026
1e756b6
PM-1803: Update talent search expert CTA to Let's Talk domain
jmgasper Feb 22, 2026
9f541c4
PS-359: Guard talent search against single-skill requests
jmgasper Feb 22, 2026
b4e6dba
PM-3172: show action column immediately for screener assignments
jmgasper Feb 22, 2026
d8f42fd
PM-2446: update appeal-response scores immediately
jmgasper Feb 22, 2026
c237b12
Tweaks for challenge editing / fun challenge checkbox
jmgasper Feb 23, 2026
eabc27b
Validate reviewers array earlier
jmgasper Feb 23, 2026
6f6165c
Aggregation of reviews fix
jmgasper Feb 23, 2026
fd72c19
Simplify challenge management links
jmgasper Feb 23, 2026
2704143
Fix for PM-3937 and terms API handling
jmgasper Feb 23, 2026
1abec5b
PM-3998: preserve 2R selection when creating design challenges
jmgasper Feb 23, 2026
b86e7bc
Better reviewer handling for multi-reviewer phases
jmgasper Feb 23, 2026
81914b0
2 round fixes, and show the Fun Challenge flag when editing challenges
jmgasper Feb 24, 2026
a706a68
Project invite handling, new system-admin emails popup
jmgasper Feb 24, 2026
a07ac73
Fix up invite acceptance
jmgasper Feb 24, 2026
67a063b
Fix invitation issue
jmgasper Feb 24, 2026
ee9b1ce
Better round handling
jmgasper Feb 24, 2026
b30f055
Updates to user emails dialog
jmgasper Feb 24, 2026
0adefe0
PM-4013: preserve empty terms when saving challenge updates
jmgasper Feb 24, 2026
16de4f3
PM-4012: preserve cleared terms in challenge editor
jmgasper Feb 24, 2026
d7258bb
PM-3998: preserve selected two-round option during challenge creation
jmgasper Feb 24, 2026
4fa864e
Hide volatility in stats for F2F / Bug Hunt
jmgasper Feb 24, 2026
754a597
Merge branch 'dev' of github.com:topcoder-platform/platform-ui into w…
jmgasper Feb 25, 2026
1fcb271
Fixes for challenge status sorting, and better route security to limi…
jmgasper Feb 25, 2026
5b64344
Fix up 0 wins display and address some minor issues on the role error…
jmgasper Feb 25, 2026
f24f8ca
When phase type changes, update the available scorecards
jmgasper Feb 25, 2026
c91c5e5
Merge branch 'dev' of github.com:topcoder-platform/platform-ui into w…
jmgasper Feb 27, 2026
0af1e4c
Better handling of copilot applications and notifications
jmgasper Feb 27, 2026
f8ae64a
Merge branch 'dev' of github.com:topcoder-platform/platform-ui into w…
jmgasper Mar 3, 2026
f63c9ad
Merge branch 'work-manager' of github.com:topcoder-platform/platform-…
jmgasper Mar 3, 2026
ad99bbf
QA fixes
jmgasper Mar 4, 2026
5e8486d
QA updates for showing project status and BA validation
jmgasper Mar 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 1 addition & 2 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -227,9 +227,8 @@ workflows:
only:
- dev
- mm-final-2025-reveal
- engagements
- HOTFIX-PM-3269

- work-manager
- deployQa:
context: org-global
requires:
Expand Down
5 changes: 5 additions & 0 deletions .env.development
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
REACT_APP_GROUPS_API_URL=https://api.topcoder-dev.com/v6/groups
REACT_APP_TERMS_API_URL=https://api.topcoder-dev.com/v5/terms
REACT_APP_RESOURCES_API_URL=https://api.topcoder-dev.com/v6/resources
REACT_APP_MEMBER_API_URL=https://api.topcoder-dev.com/v6/members
REACT_APP_RESOURCE_ROLES_API_URL=https://api.topcoder-dev.com/v6/resource-roles
5 changes: 5 additions & 0 deletions .env.production
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
REACT_APP_GROUPS_API_URL=https://api.topcoder.com/v6/groups
REACT_APP_TERMS_API_URL=https://api.topcoder.com/v5/terms

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[❗❗ correctness]
The API version for REACT_APP_TERMS_API_URL is v5, while others are v6. Ensure this is intentional and that the correct API version is being used.

REACT_APP_RESOURCES_API_URL=https://api.topcoder.com/v6/resources
REACT_APP_MEMBER_API_URL=https://api.topcoder.com/v6/members
REACT_APP_RESOURCE_ROLES_API_URL=https://api.topcoder.com/v6/resource-roles
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
"express": "^4.22.1",
"express-fileupload": "^1.5.2",
"express-interceptor": "^1.2.0",
"fflate": "^0.8.2",
"filestack-js": "^3.44.2",
"highcharts": "^10.3.3",
"highcharts-react-official": "^3.2.3",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ const FieldHtmlEditor: FC<FieldHtmlEditorProps> = (
+ '}',
height: 400,
menubar: false,
plugins: ['table', 'link', 'textcolor', 'contextmenu'],
plugins: ['table', 'link'],

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[⚠️ correctness]
The removal of the textcolor plugin from the TinyMCE editor configuration might impact users who rely on text color customization. If this change is intentional, ensure that there are no requirements for text color editing. Otherwise, consider re-adding the plugin to maintain existing functionality.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[⚠️ correctness]
The removal of the contextmenu plugin could affect the user experience by disabling right-click context menus in the editor. Verify if this change aligns with the desired functionality and user requirements.

source_view: true,
statusbar: false,
toolbar:
Expand Down
4 changes: 3 additions & 1 deletion src/apps/copilots/src/pages/copilot-requests/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,9 @@ const CopilotRequestsPage: FC = () => {
}: CopilotRequestsResponse = useCopilotRequests(sort)

const viewRequestDetails = useMemo(() => (
routeParams.requestId && find(requests, { id: +routeParams.requestId }) as CopilotRequest
routeParams.requestId
? find(requests, request => `${request.id}` === routeParams.requestId) as CopilotRequest

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[💡 performance]
The use of string interpolation to compare request.id with routeParams.requestId could be avoided if routeParams.requestId is already a string. Consider ensuring request.id is a string when stored or retrieved, or use a more explicit conversion method if necessary.

: undefined
), [requests, routeParams.requestId])

const hideRequestDetails = useCallback(() => {
Expand Down
2 changes: 1 addition & 1 deletion src/apps/copilots/src/services/copilot-opportunities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { buildUrl } from '~/libs/shared/lib/utils/url'
import { CopilotOpportunity } from '../models/CopilotOpportunity'
import { CopilotApplication } from '../models/CopilotApplication'

export const copilotBaseUrl = `${EnvironmentConfig.API.V5}/projects`
export const copilotBaseUrl = `${EnvironmentConfig.API.V6}/projects`

const PAGE_SIZE = 20

Expand Down
3 changes: 2 additions & 1 deletion src/apps/copilots/src/services/copilot-requests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { getPaginatedAsync, PaginatedResponse } from '~/libs/core/lib/xhr/xhr-fu

import { CopilotRequest } from '../models/CopilotRequest'

const baseUrl = `${EnvironmentConfig.API.V5}/projects`
const baseUrl = `${EnvironmentConfig.API.V6}/projects`

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[❗❗ correctness]
Ensure that all endpoints and related logic are compatible with the new API version V6. This change might require additional updates elsewhere in the codebase to handle any differences in API responses or behavior.

const PAGE_SIZE = 20

/**
Expand All @@ -27,6 +27,7 @@ function copilotRequestFactory(data: any): CopilotRequest {
createdAt: new Date(data.createdAt),
data: undefined,
opportunity: data.copilotOpportunity?.[0],
projectId: String(data?.projectId ?? data?.data?.projectId ?? ''),

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[⚠️ correctness]
The use of String(data?.projectId ?? data?.data?.projectId ?? '') could lead to unexpected results if projectId is 0 or false. Consider explicitly checking for undefined or null to avoid coercing falsy values.

startDate: new Date(data.data?.startDate),
}
}
Expand Down
11 changes: 9 additions & 2 deletions src/apps/copilots/src/services/projects.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,15 @@ import { EnvironmentConfig } from '~/config'

import { Project } from '../models/Project'

const baseUrl = `${EnvironmentConfig.API.V5}/projects`
const baseUrl = `${EnvironmentConfig.API.V6}/projects`

export type ProjectsResponse = SWRResponse<Project[], Project[]>

const sleep = (ms: number): Promise<()=> void> => new Promise(resolve => { setTimeout(resolve, ms) })

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[⚠️ correctness]
The sleep function returns a Promise<() => void>, which is misleading because the resolved value is actually undefined. Consider changing the return type to Promise<void> for clarity.

const normalizeProject = (project: Project): Project => ({
...project,
id: String(project.id),

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[⚠️ correctness]
The normalizeProject function converts project.id to a string. Ensure that this conversion is necessary and that all parts of the application expect id to be a string. If id is used as a number elsewhere, this could lead to inconsistencies.

})

/**
* Custom hook to fetch and manage projects data.
Expand All @@ -38,7 +42,7 @@ export const useProjects = (search?: string, config?: {isPaused?: () => boolean,
const response = await xhrGetAsync<Project[]>(
buildUrl(baseUrl, { ...params, id: chunkIds }),
)
allResults.push(...response)
allResults.push(...response.map(normalizeProject))

// Rate limit: delay 200ms between calls
// eslint-disable-next-line no-await-in-loop
Expand All @@ -49,6 +53,7 @@ export const useProjects = (search?: string, config?: {isPaused?: () => boolean,
}

return xhrGetAsync<Project[]>(url)
.then(response => response.map(normalizeProject))
}

return useSWR(url, fetcher, {
Expand All @@ -61,10 +66,12 @@ export const useProjects = (search?: string, config?: {isPaused?: () => boolean,
export const getProject = (projectId: string): Promise<Project> => {
const url = `${baseUrl}/${projectId}`
return xhrGetAsync<Project>(url)
.then(normalizeProject)
}

export const getProjects = (search?: string, config?: {filter: any}): Promise<Project[]> => {
const params = { name: search, ...config?.filter }
const url = buildUrl(baseUrl, params)
return xhrGetAsync<Project[]>(url)
.then(response => response.map(normalizeProject))
}
2 changes: 2 additions & 0 deletions src/apps/platform/src/platform.routes.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { walletAdminRoutes } from '~/apps/wallet-admin'
import { copilotsRoutes } from '~/apps/copilots'
import { adminRoutes } from '~/apps/admin'
import { reviewRoutes } from '~/apps/review'
import { workRoutes } from '~/apps/work'
import { calendarRoutes } from '~/apps/calendar'
import { engagementsRoutes } from '~/apps/engagements'
import { customerPortalRoutes } from '~/apps/customer-portal'
Expand Down Expand Up @@ -42,6 +43,7 @@ export const platformRoutes: Array<PlatformRoute> = [
...walletAdminRoutes,
...accountsRoutes,
...reviewRoutes,
...workRoutes,
...calendarRoutes,
...engagementsRoutes,
...homeRoutes,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@
gap: 4px;
}

.blockTitleAction {
display: inline-flex;
align-items: center;
margin-bottom: 6px;
}

.blockExternalLink {
margin-left: $sp-2;
margin-bottom: 6px;
Expand Down
12 changes: 11 additions & 1 deletion src/apps/review/src/lib/components/PageWrapper/PageWrapper.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,16 @@ interface Props {
backUrl?: string
backAction?: () => void
titleUrl?: string | 'emptyLink'
titleAction?: ReactNode
rightHeader?: ReactNode,
breadCrumb: BreadCrumbData[]
}

export const PageWrapper: FC<PropsWithChildren<Props>> = props => (
<div className={classNames(styles.container, props.className)}>
<BreadCrumb list={props.breadCrumb} />
{props.breadCrumb.length > 0 && (

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[⚠️ correctness]
The check props.breadCrumb.length > 0 is a good optimization to avoid rendering an empty BreadCrumb component. However, ensure that props.breadCrumb is always initialized as an array to prevent potential runtime errors.

<BreadCrumb list={props.breadCrumb} />
)}
<PageTitle>{props.pageTitle}</PageTitle>
<div className={styles.blockHeader}>
<div className={styles.blockHeaderRight}>
Expand All @@ -46,6 +49,13 @@ export const PageWrapper: FC<PropsWithChildren<Props>> = props => (
{props.pageTitle}
</h3>
</PageHeader>
{props.titleAction

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[💡 readability]
The conditional rendering of props.titleAction using a ternary operator is correct, but the use of undefined as the fallback is unnecessary. Consider using a logical AND (&&) operator for cleaner code: {props.titleAction && <div className={styles.blockTitleAction}>{props.titleAction}</div>}.

? (
<div className={styles.blockTitleAction}>
{props.titleAction}
</div>
)
: undefined}
{props.titleUrl && props.titleUrl !== 'emptyLink' && (
<a
className={styles.blockExternalLink}
Expand Down
36 changes: 36 additions & 0 deletions src/apps/work/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Work App

The Work app provides work management capabilities for:
- challenges
- projects
- TaaS engagements
- users
- groups

## Routing

`work-app.routes.tsx` defines the app root and child routes:
- `challenges`
- `projects`
- `taas`
- `users`
- `groups`

`config/routes.config.ts` contains route ids and the `rootRoute` resolver based on the active subdomain.

## Providers

`WorkApp.tsx` composes these providers:
- `WorkAppContextProvider`: authentication token and derived role/access flags
- `SWRConfigProvider`: shared SWR fetch configuration for the app

## Extending The App

1. Add feature routes under `work-app.routes.tsx` children.
2. Implement pages/components inside `src/lib` or feature folders.
3. Reuse `WorkAppContext` and `SWRConfigProvider` for shared state/data access.

## Legacy Reference

Original implementation reference:
- `work-manager/`
1 change: 1 addition & 0 deletions src/apps/work/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './src'
33 changes: 33 additions & 0 deletions src/apps/work/src/WorkApp.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { FC, useContext, useEffect, useMemo } from 'react'
import { Outlet, Routes } from 'react-router-dom'

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

import { Layout, SWRConfigProvider, WorkAppContextProvider, WORK_APP_BODY_CLASS } from './lib'
import { toolTitle } from './work-app.routes'
import './lib/styles/index.scss'

const WorkApp: FC = () => {
const { getChildRoutes }: RouterContextData = useContext(routerContext)
const childRoutes = useMemo(() => getChildRoutes(toolTitle), [getChildRoutes])

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[💡 performance]
Using useMemo here is unnecessary unless getChildRoutes is computationally expensive or has side effects. Consider removing useMemo if it's not needed for performance optimization.


useEffect(() => {
document.body.classList.add(WORK_APP_BODY_CLASS)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[⚠️ maintainability]
Directly manipulating the document.body.classList can lead to unexpected side effects, especially if multiple components are modifying the class list. Consider using a state management solution or a library like classnames to manage body classes more predictably.

return () => {
document.body.classList.remove(WORK_APP_BODY_CLASS)
}
}, [])

return (
<WorkAppContextProvider>
<SWRConfigProvider>
<Layout>
<Outlet />
<Routes>{childRoutes}</Routes>
</Layout>
</SWRConfigProvider>
</WorkAppContextProvider>
)
}

export default WorkApp
74 changes: 74 additions & 0 deletions src/apps/work/src/config/index.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
export const CHALLENGE_TRACKS = {
COMPETITIVE_PROGRAMMING: 'COMPETITIVE_PROGRAMMING',
DATA_SCIENCE: 'DATA_SCIENCE',
DESIGN: 'DESIGN',
DEVELOP: 'DEVELOP',
QA: 'QA',
} as const

export const CHALLENGE_TYPES = {
CHALLENGE: 'Challenge',
FIRST_2_FINISH: 'First2Finish',
MARATHON_MATCH: 'Marathon Match',
TASK: 'Task',
} as const

export const CHALLENGE_STATUS = {
ACTIVE: 'ACTIVE',
APPROVED: 'APPROVED',
CANCELLED: 'CANCELLED',
CANCELLED_CLIENT_REQUEST: 'CANCELLED_CLIENT_REQUEST',
CANCELLED_FAILED_REVIEW: 'CANCELLED_FAILED_REVIEW',
CANCELLED_FAILED_SCREENING: 'CANCELLED_FAILED_SCREENING',
CANCELLED_REQUIREMENTS_INFEASIBLE: 'CANCELLED_REQUIREMENTS_INFEASIBLE',
CANCELLED_WINNER_UNRESPONSIVE: 'CANCELLED_WINNER_UNRESPONSIVE',
CANCELLED_ZERO_REGISTRATIONS: 'CANCELLED_ZERO_REGISTRATIONS',
CANCELLED_ZERO_SUBMISSIONS: 'CANCELLED_ZERO_SUBMISSIONS',
COMPLETED: 'COMPLETED',
DRAFT: 'DRAFT',
NEW: 'NEW',
} as const

export const READ_ONLY = 'topcoder user'
export const ADMIN = 'administrator'
export const CONNECT_ADMIN = 'connect admin'
export const COPILOT = 'copilot'
export const MANAGER = 'manager'
export const PROJECT_MANAGER = 'project manager'
export const TOPCODER_PROJECT_MANAGER = 'topcoder project manager'
export const TALENT_MANAGER = 'talent manager'
export const TOPCODER_TALENT_MANAGER = 'topcoder talent manager'
export const TASK_MANAGER = 'task manager'
export const TOPCODER_TASK_MANAGER = 'topcoder task manager'

export const READ_ONLY_ROLES = [READ_ONLY]
export const ADMIN_ROLES = [ADMIN, CONNECT_ADMIN]
export const COPILOT_ROLES = [COPILOT]
export const TALENT_MANAGER_ROLES = [
TALENT_MANAGER,
TOPCODER_TALENT_MANAGER,
]
export const MANAGER_ROLES = [
PROJECT_MANAGER,
TOPCODER_PROJECT_MANAGER,
TALENT_MANAGER,
TOPCODER_TALENT_MANAGER,
]
export const TASK_MANAGER_ROLES = [
TASK_MANAGER,
TOPCODER_TASK_MANAGER,
TALENT_MANAGER,
TOPCODER_TALENT_MANAGER,
]

export const DEFAULT_PAGE_SIZE = 10
export const PROJECTS_PAGE_SIZE = 20
export const ENGAGEMENTS_PAGE_SIZE = 100
export const TABLE_DATE_FORMAT = 'MMM DD YYYY, HH:mm A'

export const PAGINATION_PER_PAGE_OPTIONS = [
{ label: '5', value: '5' },

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[⚠️ correctness]
The value in PAGINATION_PER_PAGE_OPTIONS is a string, but it might be more appropriate to use a number type for consistency and to avoid potential type-related issues when using these values for pagination logic.

{ label: '10', value: '10' },
{ label: '25', value: '25' },
{ label: '50', value: '50' },
]
28 changes: 28 additions & 0 deletions src/apps/work/src/config/routes.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { AppSubdomain, EnvironmentConfig } from '~/config'

export const rootRoute: string

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[💡 maintainability]
Consider using a function to determine rootRoute instead of a ternary operator. This could improve readability and maintainability, especially if the logic becomes more complex in the future.

= EnvironmentConfig.SUBDOMAIN === AppSubdomain.work
? ''
: `/${AppSubdomain.work}`

export const challengesRouteId = 'challenges'
export const challengeCreateRouteId = 'challenge-create'
export const challengeEditRouteId = 'challenge-edit'
export const projectsRouteId = 'projects'
export const projectCreateRouteId = 'project-create'
export const projectEditRouteId = 'project-edit'
export const taasRouteId = 'taas'
export const taasCreateRouteId = 'taas-create'
export const taasEditRouteId = 'taas-edit'
export const engagementsRouteId = 'engagements'
export const engagementCreateRouteId = 'engagement-create'
export const engagementEditRouteId = 'engagement-edit'
export const engagementApplicationsRouteId = 'engagement-applications'
export const engagementAssignmentsRouteId = 'engagement-assignments'
export const engagementFeedbackRouteId = 'engagement-feedback'
export const engagementExperienceRouteId = 'engagement-experience'
export const projectAssetsRouteId = 'project-assets'
export const usersRouteId = 'users'
export const projectInvitationsRouteId = 'project-invitations'
export const groupsRouteId = 'groups'
export const groupsEditRouteId = 'group-edit'
2 changes: 2 additions & 0 deletions src/apps/work/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export { workRoutes } from './work-app.routes'
export { rootRoute as workRootRoute } from './config/routes.config'
Empty file.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions src/apps/work/src/lib/assets/icons/IconSquareDownload.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions src/apps/work/src/lib/assets/icons/chevron-down.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 9 additions & 0 deletions src/apps/work/src/lib/assets/icons/lock.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading