Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
d50ae8f
PM-5598 - review context management in work manager
vas3a Jul 15, 2026
192c649
PM-5598 - wip
vas3a Jul 16, 2026
e897268
update context model
vas3a Jul 16, 2026
6c9aa1e
PM-5998 - review context editor
vas3a Jul 16, 2026
f2ea754
PM-5998 - raw json previewer
vas3a Jul 16, 2026
5dac9e9
PM-5998 - review context final round
vas3a Jul 16, 2026
15fca31
lint
vas3a Jul 16, 2026
bf9088f
lint
vas3a Jul 16, 2026
4420c22
PM-5597 - view summary for review context
vas3a Jul 16, 2026
04b6bb2
lint
vas3a Jul 17, 2026
e360fc7
lint
vas3a Jul 17, 2026
83df8f8
Merge branch 'dev' of github.com:topcoder-platform/platform-ui into P…
vas3a Jul 17, 2026
3821f30
Copilot and reviewer details to profiles page
jmgasper Jul 19, 2026
408cc74
Deploy branch
jmgasper Jul 19, 2026
17e919f
Merge pull request #2044 from topcoder-platform/copilot_reviewer
jmgasper Jul 20, 2026
e1b268f
PM-5637: Keep long assignment labels inside cards
jmgasper Jul 20, 2026
7e36931
Fix for system-admin app in dev
jmgasper Jul 20, 2026
d86bde7
Fix system admin challenge list legacy handling
jmgasper Jul 20, 2026
8b7c45e
Merge pull request #2046 from topcoder-platform/system_admin_fix
jmgasper Jul 20, 2026
661ff02
Merge pull request #2045 from topcoder-platform/PM-5637
jmgasper Jul 21, 2026
7e8b912
PM-5679: Correct special role details presentation
jmgasper Jul 21, 2026
83a29b9
Merge pull request #2047 from topcoder-platform/PM-5679
jmgasper Jul 21, 2026
9a2dd85
Merge branch 'dev' of github.com:topcoder-platform/platform-ui into dev
jmgasper Jul 22, 2026
4e49d5e
Additional pagination tweak for PM-5679
jmgasper Jul 22, 2026
1276144
Additional validation fix for PM-5679
jmgasper Jul 22, 2026
2326c60
allow zoom for showcase media assets
himaniraghav3 Jul 22, 2026
5ddd734
Changes for PM-5679 and flag for download by registered members
jmgasper Jul 22, 2026
75fe948
PM-5447: Avoid false immediate schedule warning
jmgasper Jul 23, 2026
5fae7dc
Fixes for PM-5679
jmgasper Jul 23, 2026
a64ff17
Merge pull request #2048 from topcoder-platform/PM-5656
himaniraghav3 Jul 23, 2026
ebbf0f7
Merge pull request #2049 from topcoder-platform/PM-5447-1
jmgasper Jul 23, 2026
7fe307c
Reports dashboard
jmgasper Jul 23, 2026
508b762
Merge branch 'dev' of github.com:topcoder-platform/platform-ui into dev
jmgasper Jul 23, 2026
c6dd88f
Reports dashboard tweaks
jmgasper Jul 23, 2026
7d32b45
Lint
jmgasper Jul 23, 2026
def1b80
Add Preview for Showcase in create edit form
himaniraghav3 Jul 23, 2026
de4edda
fix security issue
himaniraghav3 Jul 23, 2026
7444073
Merge pull request #2050 from topcoder-platform/PM-5658
himaniraghav3 Jul 23, 2026
5d0f900
Merge branch 'dev' of github.com:topcoder-platform/platform-ui into P…
vas3a Jul 27, 2026
215e5c5
PM-5598 - Update UI to prevent user from generating context before sa…
vas3a Jul 27, 2026
66f7643
PM-5598 - Fix saving messages
vas3a Jul 27, 2026
a57181c
PM-5672 - regenerate context
vas3a Jul 27, 2026
c495418
lint
vas3a Jul 27, 2026
b1b612e
Merge pull request #2052 from topcoder-platform/PM-5598_review-contex…
vas3a Jul 27, 2026
04a8e4a
PM-5598 - review context management save
vas3a Jul 28, 2026
2b7be9d
Merge pull request #2053 from topcoder-platform/PM-5598_review-contex…
vas3a Jul 28, 2026
55336a9
Merge branch 'master' into dev
jmgasper Jul 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ workflows:
branches:
only:
- dev
- flexi-talent
- copilot_reviewer
tags:
only: /^dev-.*/

Expand Down
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -556,6 +556,7 @@ The following summarizes the various [apps](#adding-a-new-platform-ui-applicatio
- [Gamification Admin](#gamification-admin)
- [Learn](#learn)
- [Self Service](#self-service)
- [Status](#status)

## Platform App

Expand Down Expand Up @@ -599,3 +600,13 @@ Application that allows customers to submit/start challenges self-service.

[Work README TBD](./src/apps/self-service/README.md)
[Work Routes](./src/apps/self-service/src/self-service.routes.tsx)

## Status

Administrator-only operational visibility for ECS services and tasks, API
traffic and failures, SendGrid acceptance/activity, and the Topcoder services
RDS instance. The app is read-only and loads only the active tab or expanded
diagnostic section.

[Status README](./src/apps/status/README.md)
[Status Routes](./src/apps/status/src/status-app.routes.tsx)
4 changes: 0 additions & 4 deletions src/.eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,6 @@ module.exports = {
'error',
'as-needed',
],
complexity: [
'error',
14,
],
'import/extensions': 'off',
'import/no-named-default': 'off',
'import/prefer-default-export': 'off',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,24 @@ import {
canOpenReviewUi,
getReviewUiChallengeUrl,
} from './reviewUiLink'
import { getChallengeSubTrackSuffix } from './challengeTypeTrack'

describe('getChallengeSubTrackSuffix', () => {
it('returns an empty suffix when legacy data is missing', () => {
expect(getChallengeSubTrackSuffix(undefined))
.toBe('')
})

it('returns an empty suffix when the legacy sub-track is missing', () => {
expect(getChallengeSubTrackSuffix({}))
.toBe('')
})

it('formats a legacy sub-track', () => {
expect(getChallengeSubTrackSuffix({ subTrack: 'DEVELOP' }))
.toBe(' / DEVELOP')
})
})

describe('ChallengeList review UI helpers', () => {
describe('canOpenReviewUi', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import {
canOpenReviewUi,
getReviewUiChallengeUrl,
} from './reviewUiLink'
import { getChallengeSubTrackSuffix } from './challengeTypeTrack'
import styles from './ChallengeList.module.scss'

export interface ChallengeListProps {
Expand Down Expand Up @@ -323,10 +324,7 @@ const ChallengeList: FC<ChallengeListProps> = props => {
{typeName}
<br />
{trackName}
{' '}
{challenge.legacy.subTrack
? ` / ${challenge.legacy.subTrack}`
: ''}
{getChallengeSubTrackSuffix(challenge.legacy)}
</div>
)
},
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { Challenge } from '../../models'

export const getChallengeSubTrackSuffix = (
legacy: Challenge['legacy'],
): string => (legacy?.subTrack ? ` / ${legacy.subTrack}` : '')
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ export interface Challenge {
typeId: string
/** Challenge track. */
track: ChallengeTrack
legacy: {
subTrack: string
legacy?: {
subTrack?: string
}
/** Challenge status. */
status: ChallengeStatus
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,13 @@
color: $black-80;
}

.detailCapacity {
box-sizing: border-box;
max-width: 100%;
overflow-wrap: anywhere;
white-space: normal;
}

.memberTimePill {
display: inline-flex;
align-items: center;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/* eslint-disable import/no-extraneous-dependencies, ordered-imports/ordered-imports, sort-keys */
import '@testing-library/jest-dom'

import { readFileSync } from 'fs'
import React from 'react'
import {
fireEvent,
Expand All @@ -20,6 +21,18 @@ import { MembersView } from './MembersView'
const mockGetFlexiMemberSummary = getFlexiMemberSummary as jest.Mock
const mockGetFlexiMemberList = getFlexiMemberList as jest.Mock
const mockGetFlexiMemberDetail = getFlexiMemberDetail as jest.Mock
const flexiTalentPageStyles = readFileSync(
`${__dirname}/../../FlexiTalentPage/FlexiTalentPage.module.scss`,
'utf8',
)
const detailCapacityWrappingPattern = [
'[.]detailCapacity \\{',
'[^}]*box-sizing: border-box;',
'[^}]*max-width: 100%;',
'[^}]*overflow-wrap: anywhere;',
'[^}]*white-space: normal;',
'[^}]*\\}',
].join('')

jest.mock('~/apps/admin/src/lib/components/common/Pagination', () => ({
Pagination: () => <div>pagination</div>,
Expand Down Expand Up @@ -53,6 +66,13 @@ jest.mock('../MemberHistoryModal', () => ({
MemberHistoryModal: () => undefined,
}))

describe('MembersView styles', () => {
it('allows long assignment labels to wrap within the member detail card', () => {
expect(flexiTalentPageStyles)
.toMatch(new RegExp(detailCapacityWrappingPattern))
})
})

describe('MembersView', () => {
beforeEach(() => {
jest.clearAllMocks()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,16 @@
background: rgba(0, 0, 0, 0.9);
}

.mainFrame {
.mainFrame,
.zoomFrame {
position: relative;
width: min(100%, 1000px);
height: min(100%, 90vh);
max-height: min(100%, 90vh);
display: flex;
flex-direction: column;
padding: 120px 0 0;
box-sizing: border-box;
}

.close {
Expand All @@ -28,7 +31,78 @@
cursor: pointer;
}

.mainContent {
.zoomOpen {
position: absolute;
bottom: calc(100% + 8px);
right: 0;
z-index: 2;
display: flex;
align-items: center;
justify-content: center;
width: 40px;
height: 40px;
border: 0;
border-radius: 50%;
background: rgba($tc-white, 0.12);
color: $tc-white;
cursor: pointer;
transition: background 0.15s ease;

&:hover {
background: rgba($tc-white, 0.22);
}

&:active {
background: rgba($tc-white, 0.18);
}
}

.zoomToolbar {
position: absolute;
bottom: calc(100% + 8px);
right: 0;
z-index: 2;
display: flex;
align-items: center;
gap: 6px;
}

.zoomControl {
display: flex;
align-items: center;
justify-content: center;
min-width: 36px;
height: 36px;
padding: 0 8px;
border: 0;
border-radius: 8px;
background: rgba($tc-white, 0.12);
color: $tc-white;
font-size: 12px;
font-weight: 600;
cursor: pointer;
transition: background 0.15s ease;

&:hover:not(:disabled) {
background: rgba($tc-white, 0.22);
}

&:disabled {
opacity: 0.4;
cursor: default;
}
}

.zoomLevel {
min-width: 48px;
color: $tc-white;
font-size: 12px;
font-weight: 600;
text-align: center;
}

.mainContent,
.zoomContent {
display: flex;
flex-direction: column;
gap: 24px;
Expand All @@ -37,27 +111,49 @@
position: relative;
}

.galleryMedia {
.galleryMedia,
.zoomMedia {
display: flex;
align-items: center;
justify-content: center;
min-height: 340px;
flex: 1;
min-height: 0;
padding: 1rem;
border-radius: 1rem;
background-color: var(--neutral-100);
overflow: hidden;
}

.zoomMedia {
display: block;
overflow: auto;
-webkit-overflow-scrolling: touch;
align-items: unset;
justify-content: unset;

@include scrollbar;
}

.galleryMedia img,
.galleryMedia video {
max-width: 100%;
max-height: 74vh;
max-height: 100%;
width: auto;
height: auto;
object-fit: contain;
}

.galleryImage {
width: auto;
height: auto;
display: block;
}

.zoomImage {
display: block;
max-width: none;
height: auto;
margin: 0 auto;
}

.galleryPlaceholder {
Expand Down Expand Up @@ -118,10 +214,10 @@
}
}


.galleryThumbnails {
display: flex;
align-items: flex-start;
flex-shrink: 0;
gap: $sp-4;
height: 160px;
width: 100%;
Expand Down
Loading
Loading