Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
137 commits
Select commit Hold shift + click to select a range
f8469f2
Add dashboard custom ranges and bottom timelines
jmgasper Jul 23, 2026
03d2e68
PM-5701 Remove timezone from Assignment and Accept popups
himaniraghav3 Jul 27, 2026
e482df6
PM-5702 Update Modal field label
himaniraghav3 Jul 27, 2026
8810fbe
PM-5704 Engagement details page
himaniraghav3 Jul 28, 2026
63a8914
PM-5705 Improve Status Filter
himaniraghav3 Jul 28, 2026
b0df1cc
fix linting
himaniraghav3 Jul 28, 2026
514250d
PM-5665 - instant review
vas3a Jul 28, 2026
3027194
Ai suggest button for skills
himaniraghav3 Jul 28, 2026
be0ae58
Merge branch 'dev' of github.com:topcoder-platform/platform-ui into P…
vas3a Jul 28, 2026
ecdd80c
Merge branch 'dev' of github.com:topcoder-platform/platform-ui into P…
vas3a Jul 29, 2026
e37f911
PM-5738 - Add system admin support for deterministic ai workflows
vas3a Jul 29, 2026
a1a6d1e
Merge pull request #2056 from topcoder-platform/v9-engagements
himaniraghav3 Jul 29, 2026
1835b3a
Merge pull request #2057 from topcoder-platform/v9-engagements
himaniraghav3 Jul 29, 2026
849663c
Merge pull request #2055 from topcoder-platform/PM-5665_instant-review
vas3a Jul 29, 2026
d2a78a0
PM-5710 Add extra fields to engagements
himaniraghav3 Jul 29, 2026
d98876c
Merge branch 'dev' of github.com:topcoder-platform/platform-ui into dev
jmgasper Jul 30, 2026
14aeac1
Fix for PM-5776
jmgasper Jul 30, 2026
ae8aab0
PM-5708: Show failed screening results to submitters
jmgasper Jul 30, 2026
b3c6264
PM-5471: add reviewer filter to past challenges
jmgasper Jul 30, 2026
8930c92
PM-5522: Reconcile draft status after partial save
jmgasper Jul 30, 2026
c9a9cd0
PM-5557: Include project billing accounts in filter search
jmgasper Jul 30, 2026
7259a4a
Merge pull request #2060 from topcoder-platform/PM-5471
jmgasper Jul 30, 2026
d4842d4
Merge pull request #2061 from topcoder-platform/PM-5522
jmgasper Jul 30, 2026
396200f
Merge pull request #2062 from topcoder-platform/PM-5557
jmgasper Jul 30, 2026
0bebf59
PM-5609: Show infected status for failed virus scans
jmgasper Jul 30, 2026
990f138
Merge pull request #2059 from topcoder-platform/PM-5708
jmgasper Jul 30, 2026
9288e3e
Merge pull request #2063 from topcoder-platform/PM-5609
jmgasper Jul 30, 2026
e48ca68
PM-5471: complete past challenge role filter
jmgasper Jul 30, 2026
0ae1ec8
Merge pull request #2064 from topcoder-platform/PM-5471-1
jmgasper Jul 30, 2026
4ae5672
Merge pull request #2058 from topcoder-platform/PM-5710
himaniraghav3 Jul 30, 2026
fb66e3f
PM-5778: Show N/A for in-progress scores
jmgasper Jul 30, 2026
5fb9589
PM-5711 Re-arrange engagement create/edit form fields
himaniraghav3 Jul 30, 2026
ce5ed47
PM-5695 - no comments for deterministic ai workflows
vas3a Jul 30, 2026
ede6bc0
Merge branch 'dev' of github.com:topcoder-platform/platform-ui into P…
vas3a Jul 30, 2026
04219e0
lint fixes
vas3a Jul 30, 2026
9a7c64a
Merge pull request #2067 from topcoder-platform/PM-5695_no-comments-f…
vas3a Jul 30, 2026
b28e31a
Merge pull request #2066 from topcoder-platform/PM-5711
himaniraghav3 Jul 30, 2026
7a54024
PM-5636 - showcase post card - render content text as plain
vas3a Jul 30, 2026
e4bf480
we actually don't need html content
vas3a Jul 30, 2026
ff60f20
PM-5725: Enable compilation errors in view mode
jmgasper Jul 30, 2026
07121ce
Merge pull request #2068 from topcoder-platform/PM-5636_showcase-post…
vas3a Jul 30, 2026
652a5bd
PM-5722: Show final Marathon Match winner scores
jmgasper Jul 30, 2026
8ba4a8d
PM-5771: Correct initial scorecard actions
jmgasper Jul 30, 2026
2aeaf54
PM-5770: Correct submitter scorecard title
jmgasper Jul 30, 2026
c4d0264
PM-5765: Add design scorecard fill action
jmgasper Jul 30, 2026
370a09e
PM-5757: Add view-mode footer actions
jmgasper Jul 30, 2026
f0133df
PM-5713 Add shortlisted application status
himaniraghav3 Jul 30, 2026
b47dbf6
PM-5756: Improve challenge autosave controls
jmgasper Jul 30, 2026
ad861e8
Merge pull request #2075 from topcoder-platform/PM-5711
himaniraghav3 Jul 30, 2026
63cb029
PM-5754: clarify winning submission download access
jmgasper Jul 30, 2026
93adb34
PM-5750: Allow full access members as copilots
jmgasper Jul 30, 2026
aa141fe
PM-5764: Fix screening scorecard labels
jmgasper Jul 30, 2026
269c59f
PM-5767: Show submission download preloader
jmgasper Jul 30, 2026
c9fa5b4
PM-5773: expose score override controls
jmgasper Jul 30, 2026
628b519
PM-5775: show checkpoint winner indicator
jmgasper Jul 30, 2026
5a3708b
PM-5719: Add member payment dashboards
jmgasper Jul 30, 2026
4bdaf55
Merge pull request #2065 from topcoder-platform/PM-5778
jmgasper Jul 31, 2026
3ef0eea
Merge pull request #2069 from topcoder-platform/PM-5725
jmgasper Jul 31, 2026
e500500
Merge pull request #2070 from topcoder-platform/PM-5722
jmgasper Jul 31, 2026
86f794b
Merge pull request #2071 from topcoder-platform/PM-5771
jmgasper Jul 31, 2026
8b417d8
Merge pull request #2074 from topcoder-platform/PM-5757
jmgasper Jul 31, 2026
793034c
Merge pull request #2076 from topcoder-platform/PM-5756
jmgasper Jul 31, 2026
8f215cd
Merge pull request #2077 from topcoder-platform/PM-5754
jmgasper Jul 31, 2026
1b1f490
Merge pull request #2080 from topcoder-platform/PM-5767
jmgasper Jul 31, 2026
bee471f
Merge pull request #2081 from topcoder-platform/PM-5773
jmgasper Jul 31, 2026
5fdce87
Merge origin/dev into PM-5770
jmgasper Jul 31, 2026
82e2476
Merge pull request #2082 from topcoder-platform/PM-5775
jmgasper Jul 31, 2026
5887d2d
Merge pull request #2083 from topcoder-platform/PM-5719-1
jmgasper Jul 31, 2026
a5e542c
Merge pull request #2072 from topcoder-platform/PM-5770
jmgasper Jul 31, 2026
abe729a
Merge pull request #2078 from topcoder-platform/PM-5750
jmgasper Jul 31, 2026
632eef7
Merge origin/dev into PM-5764
jmgasper Jul 31, 2026
b12aed9
Merge pull request #2079 from topcoder-platform/PM-5764
jmgasper Jul 31, 2026
6cf457c
Merge origin/dev into PM-5765
jmgasper Jul 31, 2026
d2bb0ab
Merge pull request #2073 from topcoder-platform/PM-5765
jmgasper Jul 31, 2026
f24e5d1
PM-5783: Add Copy spec action to challenge descriptions
jmgasper Jul 31, 2026
2f3af95
Merge pull request #2084 from topcoder-platform/PM-5783
jmgasper Jul 31, 2026
7dd5f21
PM-5784: Avoid false Design shortening warnings
jmgasper Jul 31, 2026
90d3c4e
Merge pull request #2085 from topcoder-platform/PM-5784
jmgasper Jul 31, 2026
dad9c05
PM-5340: Hide Marathon Match scores until system tests finish
jmgasper Jul 31, 2026
13ce877
PM-5782: Show schedule shortening validation errors
jmgasper Jul 31, 2026
11cc625
PM-5713 Fix shortlisted pill css
himaniraghav3 Jul 31, 2026
0eedc9e
Merge pull request #2088 from topcoder-platform/PM-5711
himaniraghav3 Jul 31, 2026
14aaf39
Merge pull request #2087 from topcoder-platform/PM-5782
jmgasper Jul 31, 2026
8354adf
Merge pull request #2086 from topcoder-platform/PM-5340
jmgasper Jul 31, 2026
87600da
PM-5748: allow iterative reviewers to view submissions
jmgasper Jul 31, 2026
e70279d
Merge pull request #2089 from topcoder-platform/PM-5748
jmgasper Jul 31, 2026
85f40da
PM-5703: correct dashboard range and display formatting
jmgasper Jul 31, 2026
b9c5e8c
Merge pull request #2090 from topcoder-platform/PM-5703
jmgasper Jul 31, 2026
2d1c705
PM-5714 Add new fields to assignment
himaniraghav3 Jul 31, 2026
7dc0a56
PM-5715 Display new fields on assignements list
himaniraghav3 Jul 31, 2026
569d09d
Merge pull request #2091 from topcoder-platform/PM-5711
himaniraghav3 Jul 31, 2026
832c158
PM-5784: Honor Design phase shortening
jmgasper Jul 31, 2026
542bb43
PM-5435: Prefer the completed provisional test process
jmgasper Aug 1, 2026
c6c1e60
PM-5757: Show cancel options from edit footer
jmgasper Aug 1, 2026
33cd6b8
PM-5773: restore copilot scorecard editing
jmgasper Aug 1, 2026
fb67406
PM-5775: refresh checkpoint winner data
jmgasper Aug 1, 2026
4694c18
Merge pull request #2093 from topcoder-platform/PM-5435
jmgasper Aug 1, 2026
a540338
Merge pull request #2094 from topcoder-platform/PM-5757-1
jmgasper Aug 1, 2026
ccffa28
Merge pull request #2095 from topcoder-platform/PM-5773-1
jmgasper Aug 1, 2026
5941896
Merge pull request #2096 from topcoder-platform/PM-5775-1
jmgasper Aug 1, 2026
3623b47
Merge pull request #2092 from topcoder-platform/PM-5784-1
jmgasper Aug 1, 2026
5324ea3
Render instant review in wm view mode
vas3a Aug 3, 2026
9a00d65
PM-5775: gate checkpoint winner indicator by pass result
jmgasper Aug 3, 2026
97824dc
lint
vas3a Aug 3, 2026
40b7df3
Lint
jmgasper Aug 3, 2026
249a5c4
Merge pull request #2097 from topcoder-platform/PM-5791_instant-revie…
vas3a Aug 3, 2026
ce58855
Merge pull request #2098 from topcoder-platform/PM-5775-2
jmgasper Aug 3, 2026
b9e54a2
Test challenge flag PM-5802
jmgasper Aug 3, 2026
026b946
Fix QA feedback on engagements
himaniraghav3 Aug 3, 2026
ee5d613
Merge pull request #2099 from topcoder-platform/PM-5711
himaniraghav3 Aug 3, 2026
98dee46
PM-5695 - expose workflow for runs
vas3a Aug 3, 2026
533c305
fix type
vas3a Aug 3, 2026
88ef81e
undo workflow for virusscan
vas3a Aug 3, 2026
c6f6acf
lint
vas3a Aug 3, 2026
c5214cf
Merge pull request #2100 from topcoder-platform/PM-5791_instant-revie…
vas3a Aug 3, 2026
12c68aa
PM-5802: show test flag in advanced options
jmgasper Aug 3, 2026
a8a9073
PM-5757: Keep footer cancel menu visible
jmgasper Aug 3, 2026
131cef0
PM-5800: Hide copilot fee for task challenges
jmgasper Aug 3, 2026
28a2afa
Merge pull request #2101 from topcoder-platform/PM-5802
jmgasper Aug 4, 2026
2ea5a68
Merge pull request #2102 from topcoder-platform/PM-5757-2
jmgasper Aug 4, 2026
798dc3f
Merge pull request #2103 from topcoder-platform/PM-5800
jmgasper Aug 4, 2026
caab151
CI/CD deploy
jmgasper Aug 4, 2026
9dfbec7
Security updates and fix for test challenge flag in work app
jmgasper Aug 4, 2026
c9ff4bb
Update to fix the nav tags
jmgasper Aug 4, 2026
358bdb0
PM-5695 - fix scorecard header
vas3a Aug 4, 2026
d6277cb
Merge pull request #2104 from topcoder-platform/PM-5695_fix-scorecard…
vas3a Aug 4, 2026
c58dbef
Fix icon & score for deterministic UI
vas3a Aug 5, 2026
3709c28
lint
vas3a Aug 5, 2026
3d81c46
Merge pull request #2105 from topcoder-platform/fix-deterministic-ui
vas3a Aug 5, 2026
d68bbba
Fix system admin nav tabs
jmgasper Aug 5, 2026
ca01d47
Merge branch 'dev' of github.com:topcoder-platform/platform-ui into dev
jmgasper Aug 5, 2026
13cc8c2
Further navigation fixes
jmgasper Aug 5, 2026
f329034
Fix for Firefox when downloading submissions
jmgasper Aug 5, 2026
ba43c13
PM-5809 Fix field for cancelled engagements
himaniraghav3 Aug 5, 2026
8955bda
PM-5810 Allow assigment edit
himaniraghav3 Aug 5, 2026
64ad6dd
Merge pull request #2106 from topcoder-platform/PM-5711
himaniraghav3 Aug 5, 2026
a6fd9ff
Fix for tab selection (PM-5816)
jmgasper Aug 5, 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
23 changes: 17 additions & 6 deletions .github/workflows/trivy.yaml
Original file line number Diff line number Diff line change
@@ -1,34 +1,45 @@
name: Trivy Scanner

permissions:
contents: read
security-events: write
on:
push:
branches:
- main
- master
- dev
- develop
pull_request:
workflow_dispatch:

permissions:
actions: read
contents: read
security-events: write

jobs:
trivy-scan:
name: Use Trivy
name: Trivy SAST and SCA
runs-on: ubuntu-24.04
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Run Trivy scanner in repo mode
uses: aquasecurity/trivy-action@0.35.0
uses: aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25 # v0.36.0
with:
version: "v0.73.0"
scan-type: "fs"
scan-ref: "."
ignore-unfixed: true
format: "sarif"
output: "trivy-results.sarif"
severity: "CRITICAL,HIGH,UNKNOWN"
limit-severities-for-sarif: true
scanners: vuln,secret,misconfig,license
trivyignores: ".trivyignore.yaml"
github-pat: ${{ secrets.GITHUB_TOKEN }}

- name: Upload Trivy scan results to GitHub Security tab
uses: github/codeql-action/upload-sarif@v3
if: always()
uses: github/codeql-action/upload-sarif@v4
with:
sarif_file: "trivy-results.sarif"
31 changes: 31 additions & 0 deletions .trivyignore.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# React Router GHSA-qwww-vcr4-c8h2 affects only applications using its unstable
# React Server Components APIs. This project is a browser-only CRA application
# and has no RSC dependencies, configuration, or API usage. React Router 8 also
# requires React 19 and a newer Node runtime, so keep this exception pinned to
# the reviewed package version and lockfile entry.
vulnerabilities:
- id: GHSA-qwww-vcr4-c8h2
paths:
- "yarn.lock"
purls:
- "pkg:npm/react-router@7.18.2"
statement: "Not applicable: this browser SPA does not use React Router's unstable RSC APIs."

# Stripe publishable keys are client-side identifiers, not secret API keys. Keep
# this exception limited to the three environment files that intentionally
# configure the browser application.
secrets:
- id: stripe-publishable-token
paths:
- ".environments/.env.dev"
- ".environments/.env.qa"
- ".environments/.env.prod"
statement: "These are intentional Stripe publishable keys used by the client application."

# ISC is the declared license for this project. Trivy reports the project-level
# license against the dependency lockfile, so scope the exception to that path.
licenses:
- id: ISC
paths:
- "yarn.lock"
statement: "ISC is the approved license for this project."
91 changes: 90 additions & 1 deletion craco.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,47 @@ function withNodeModulesWatchIgnore(ignored) {
];
}

/**
* Converts CRA's webpack-dev-server v4 hook registrations into v5 middleware entries.
*
* @param {Function|undefined} hook - Legacy CRA middleware hook.
* @param {object} devServer - Active webpack-dev-server instance.
* @param {string} namePrefix - Stable prefix used for middleware diagnostics.
* @returns {Array<object>} Middleware entries accepted by webpack-dev-server v5.
*/
function collectLegacyMiddlewares(hook, devServer, namePrefix) {
if (!hook) {
return [];
}

const originalApp = devServer.app;
const appProxy = Object.create(originalApp);
const registrations = [];

appProxy.use = (...args) => {
registrations.push(args);
return appProxy;
};

devServer.app = appProxy;
try {
hook(devServer);
} finally {
devServer.app = originalApp;
}

return registrations.flatMap((registration, registrationIndex) => {
const args = [...registration];
const path = typeof args[0] === 'string' ? args.shift() : undefined;

return args.map((middleware, middlewareIndex) => ({
name: `${namePrefix}-${registrationIndex}-${middlewareIndex}`,
...(path ? { path } : {}),
middleware,
}));
});
}

/**
* Preserves CRA's dev-server static config while disabling public asset watches.
*
Expand All @@ -29,14 +70,53 @@ function withNodeModulesWatchIgnore(ignored) {
* @throws This function does not throw.
*/
function configureDevServer(devServerConfig) {
const {
https,
onAfterSetupMiddleware,
onBeforeSetupMiddleware,
setupMiddlewares,
...supportedConfig
} = devServerConfig;
const staticConfig = devServerConfig.static || {};

return {
...devServerConfig,
...supportedConfig,
...(https ? {
server: {
type: 'https',
options: typeof https === 'object' ? https : {},
},
} : {}),
static: {
...staticConfig,
watch: false,
},
setupMiddlewares: (middlewares, devServer) => {
// CRA 5 still calls the webpack-dev-server v4 shutdown method.
if (!devServer.close && devServer.stopCallback) {
devServer.close = devServer.stopCallback.bind(devServer);
}

const configuredMiddlewares = setupMiddlewares
? setupMiddlewares(middlewares, devServer)
: middlewares;
const beforeMiddlewares = collectLegacyMiddlewares(
onBeforeSetupMiddleware,
devServer,
'cra-before-setup',
);
const afterMiddlewares = collectLegacyMiddlewares(
onAfterSetupMiddleware,
devServer,
'cra-after-setup',
);

return [
...beforeMiddlewares,
...configuredMiddlewares,
...afterMiddlewares,
];
},
};
}

Expand Down Expand Up @@ -72,6 +152,15 @@ const localIdentName = isProd
const resolve = dir => path.resolve(__dirname, dir);

module.exports = {
jest: {
configure: {
moduleNameMapper: {
// Jest 27 cannot resolve React Router 7's nested conditional export.
'^react-router/dom$': '<rootDir>/test/react-router-dom.cjs',
},
},
},

style: {
modules: {
localIdentName,
Expand Down
46 changes: 27 additions & 19 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
"@uiw/react-codemirror": "^4.25.8",
"amazon-s3-uri": "^0.1.1",
"apexcharts": "^3.54.1",
"axios": "^1.15.0",
"axios": "^1.19.0",
"browser-cookies": "^1.2.0",
"city-timezones": "^1.3.2",
"classnames": "^2.5.1",
Expand All @@ -52,7 +52,7 @@
"crypto-js": "^4.2.0",
"customize-cra": "^1.0.0",
"date-fns": "^2.30.0",
"dompurify": "^2.5.8",
"dompurify": "^3.4.13",
"draft-js": "^0.11.7",
"draft-js-export-html": "^1.4.1",
"draft-js-markdown-shortcuts-plugin": "^0.6.1",
Expand All @@ -68,7 +68,7 @@
"highlight.js": "^11.11.1",
"html2canvas": "^1.4.1",
"lodash": "^4.18.1",
"markdown-it": "^13.0.2",
"markdown-it": "^14.3.0",
"marked": "4.3.0",
"moment": "^2.30.1",
"moment-duration-format": "^2.3.2",
Expand Down Expand Up @@ -97,7 +97,7 @@
"react-redux-toastr": "^7.6.13",
"react-responsive": "^9.0.2",
"react-responsive-modal": "^6.4.2",
"react-router-dom": "^6.30.2",
"react-router-dom": "^7.18.2",
"react-scripts": "5.0.1",
"react-select": "^5.10.2",
"react-spinners": "^0.17.0",
Expand All @@ -116,7 +116,7 @@
"remark-gfm": "^3.0.1",
"remark-parse": "^11.0.0",
"remove": "^0.1.5",
"sanitize-html": "^2.17.0",
"sanitize-html": "^2.17.6",
"sass": "^1.95.0",
"styled-components": "^5.3.11",
"swr": "^1.3.0",
Expand All @@ -128,7 +128,7 @@
"yup": "^1.7.1"
},
"devDependencies": {
"@babel/core": "^7.28.5",
"@babel/core": "^7.29.6",
"@babel/plugin-syntax-jsx": "^7.27.1",
"@babel/plugin-transform-runtime": "^7.28.5",
"@babel/preset-env": "^7.28.5",
Expand All @@ -147,12 +147,10 @@
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^14.6.1",
"@types/axios": "^0.14.4",
"@types/dompurify": "^2.4.0",
"@types/highlightjs": "^9.12.6",
"@types/jest": "^29.5.14",
"@types/lodash": "^4.17.21",
"@types/markdown-it": "^12.2.3",
"@types/markdown-it": "^14.1.2",
"@types/marked": "4.3.2",
"@types/node": "^18.19.130",
"@types/reach__router": "^1.3.15",
Expand All @@ -162,30 +160,24 @@
"@types/react-gtm-module": "^2.0.4",
"@types/react-helmet": "^6.1.11",
"@types/react-redux-toastr": "^7.6.6",
"@types/react-router-dom": "^5.3.3",
"@types/redux-actions": "2.6.5",
"@types/redux-logger": "^3.0.13",
"@types/redux-promise": "^0.5.32",
"@types/sanitize-html": "^2.16.0",
"@types/systemjs": "^6.15.4",
"@types/testing-library__jest-dom": "^5.14.9",
"@types/uuid": "^8.3.4",
"@typescript-eslint/eslint-plugin": "^5.62.0",
"@typescript-eslint/parser": "^5.62.0",
"@wdio/junit-reporter": "^7.40.0",
"autoprefixer": "^10.4.22",
"babel-eslint": "^11.0.0-beta.2",
"babel-jest": "^29.7.0",
"babel-plugin-inline-react-svg": "^2.0.2",
"babel-plugin-module-resolver": "^4.1.0",
"babel-plugin-named-exports-order": "^0.0.2",
"babel-plugin-react-css-modules": "^5.2.6",
"concurrently": "^7.6.0",
"craco-css-modules": "^1.0.6",
"craco-plugin-env": "^1.0.5",
"craco-resolve-url-loader": "^1.0.0",
"cross-env": "^7.0.3",
"css-loader": "3.6.0",
"eslint": "^8.57.1",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-react-app": "^7.0.1",
Expand All @@ -202,7 +194,6 @@
"istanbul-lib-coverage": "^3.2.2",
"jest": "^29.7.0",
"jest-cli": "^29.7.0",
"lint-staged": "^13.3.0",
"nyc": "^15.1.0",
"postcss-loader": "^4.3.0",
"postcss-scss": "^3.0.5",
Expand All @@ -218,15 +209,32 @@
"style-loader": "^3.3.4",
"systemjs-webpack-interop": "^2.3.7",
"tsconfig-paths-webpack-plugin": "^4.2.0",
"typed-scss-modules": "^7.1.4",
"webpack": "^5.103.0",
"webpack-cli": "^4.10.0",
"webpack-config-single-spa-react": "^4.0.5",
"webpack-dev-server": "^4.15.2",
"webpack-dev-server": "^5.2.6",
"webpack-merge": "^5.10.0"
},
"resolutions": {
"@types/react": "18.3.27",
"@babel/core": "7.29.7",
"@tootallnate/once": "2.0.1",
"axios": "1.19.0",
"body-parser": "1.20.6",
"**/esbuild": "0.25.12",
"@jackwilsdon/craco-use-babelrc/@craco/craco/cross-spawn": "6.0.6",
"draft-js/immutable": "4.3.9",
"draft-js-plugins-editor/immutable": "4.3.9",
"draft-js-markdown-shortcuts-plugin/**/immutable": "4.3.9",
"sass/immutable": "5.1.9",
"react-scripts/resolve-url-loader": "5.0.0",
"react-scripts/resolve-url-loader/postcss": "8.5.25",
"react-scripts/**/serialize-javascript": "7.0.7",
"@svgr/plugin-svgo": "6.5.1",
"react-scripts/**/svgo": "2.8.3",
"**/tar": "7.5.22",
"underscore": "1.13.8",
"**/uuid": "11.1.1",
"react-scripts/webpack-dev-server": "5.2.6",
"string-width": "4.2.0",
"node-fetch": "2.6.7",
"nth-check": "2.0.1",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/* eslint-disable import/no-extraneous-dependencies, ordered-imports/ordered-imports */
import '@testing-library/jest-dom'
import type { RenderResult } from '@testing-library/react'
import { render, screen } from '@testing-library/react'

import SettingSection from './SettingSection'

describe('SettingSection', () => {
it('renders user-provided information as text instead of HTML', () => {
const unsafeInfo: string = '<img src="invalid" onerror="alert(1)">'
const view: RenderResult = render(
<SettingSection title='Software' infoText={unsafeInfo} />,
)

expect(screen.getByText(unsafeInfo))
.toBeInTheDocument()
expect(view.container.querySelector('img'))
.not
.toBeInTheDocument()
})
})
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,7 @@ const SettingSection: FC<SettingSectionProps> = (props: SettingSectionProps) =>

<div className={styles.contentMiddle}>
<p className='body-main-bold'>{props.title}</p>
<p
className={styles.infoText}
dangerouslySetInnerHTML={{ __html: props.infoText || '' }}
/>
<p className={styles.infoText}>{props.infoText || ''}</p>
</div>

{props.actionElement}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,15 @@ export const AiReviewWorkflowsPage: FC = () => {
},
type: 'element',
},
{
defaultSortDirection: 'asc',
label: 'Review Method',
propertyName: 'reviewMethod',
renderer: (data: AiWorkflow) => (
<div className={styles.cellText}>{data.reviewMethod || 'N/A'}</div>
),
type: 'element',
},
], [])

const columnsMobile = useMemo<MobileTableColumn<AiWorkflow>[][]>(
Expand Down
Loading
Loading