Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
0d44ccb
PM-2524 Fix empty submissions tas for DS F2F
himaniraghav3 Dec 5, 2025
2eaecf7
cleanup
himaniraghav3 Dec 5, 2025
42d1e9b
remove track check
himaniraghav3 Dec 8, 2025
a495d36
Merge pull request #7158 from topcoder-platform/PM-2524
himaniraghav3 Dec 9, 2025
1c26e03
PM-3204 - handle utm codes from cookies
vas3a Dec 15, 2025
c785a06
lint fixes
vas3a Dec 15, 2025
02378d1
lint fixes
vas3a Dec 15, 2025
8b81f58
Merge pull request #7160 from topcoder-platform/PM-3204_cookies-utm-c…
vas3a Dec 15, 2025
533faac
Update tc-libs
vas3a Dec 15, 2025
276eb66
fix package-lock
vas3a Dec 15, 2025
d37de2d
Points display for checkpoint prizes
jmgasper Dec 15, 2025
212dead
Build fix
jmgasper Dec 15, 2025
be243b6
Merge branch 'develop' into fix-tc-core-library-dep
jmgasper Dec 15, 2025
22e089d
Merge pull request #7161 from topcoder-platform/fix-tc-core-library-dep
jmgasper Dec 15, 2025
4f30b08
Remove package lock to see if that helps build
jmgasper Dec 15, 2025
f16f2d8
Fix package-lock
vas3a Dec 16, 2025
01f5c0d
fix package-lock (revert)
vas3a Dec 16, 2025
f07cb6e
update latest for core-library
vas3a Dec 16, 2025
2766a85
Merge pull request #7162 from topcoder-platform/fix-package-lock
vas3a Dec 16, 2025
d885761
fix package-lock
vas3a Dec 16, 2025
64d1871
Dockerfile: use ci instead of install
vas3a Dec 16, 2025
d2bc8b7
use "npm ci" on test job CI
vas3a Dec 16, 2025
cf1ae60
Merge pull request #7164 from topcoder-platform/fix-build
vas3a Dec 16, 2025
196f8f1
Merge pull request #7163 from topcoder-platform/fix-package-lock
vas3a Dec 16, 2025
7a77283
package-lock
vas3a Dec 16, 2025
980d8b5
Merge pull request #7165 from topcoder-platform/fix-build
vas3a Dec 16, 2025
70d84e2
update package-lock
vas3a Dec 16, 2025
a59243f
Merge pull request #7166 from topcoder-platform/fix-build
vas3a Dec 16, 2025
806c174
Merge pull request #7169 from topcoder-platform/master
kkartunov Dec 17, 2025
62d01f6
Engagements listing
jmgasper Jan 9, 2026
f321daa
Deploy engagements branch
jmgasper Jan 12, 2026
100a6dd
Lint
jmgasper Jan 12, 2026
e4130de
Bump node version to help with dependency issues
jmgasper Jan 13, 2026
edb30ba
This was a bad idea - this will be a rabbithole
jmgasper Jan 13, 2026
05c941c
Deployment issue fix
jmgasper Jan 13, 2026
52fd4a7
Deployment issue fix
jmgasper Jan 13, 2026
b87c1ac
API fixes
jmgasper Jan 13, 2026
7641d8c
Fix link to platform-ui
jmgasper Jan 13, 2026
dd69e4c
Fixes for UI issues
jmgasper Jan 13, 2026
1488926
Lint
jmgasper Jan 13, 2026
e21536e
Layout updates for the engagements page
jmgasper Jan 14, 2026
91ca06d
Look and feel update and new statuses
jmgasper Jan 15, 2026
9f1631d
Bug fixes and UI tweaks
jmgasper Jan 15, 2026
48a09e6
Better look and feel for engagements
jmgasper Jan 16, 2026
ab8128e
PM-3447
jmgasper Jan 16, 2026
f370370
Fix for engagements search panel filter
jmgasper Jan 19, 2026
73b66df
PM-2394 cleanup looker based member verification
himaniraghav3 Jan 19, 2026
86d4dc4
build fix for appirio-tech
kkartunov Jan 20, 2026
9221f60
Merge branch 'develop' into PM-2394
kkartunov Jan 20, 2026
b11e8d7
Merge pull request #7170 from topcoder-platform/PM-2394
kkartunov Jan 20, 2026
92647e2
QA fixes for engagements list
jmgasper Jan 21, 2026
aa4648b
Engagements page layout fixesg
jmgasper Jan 21, 2026
be68d82
Better engagement sorting
jmgasper Jan 22, 2026
ddc6875
Strip out Gigs
jmgasper Jan 22, 2026
55fbc84
Fix build error
jmgasper Jan 22, 2026
5af3eda
Merge branch 'develop' of github.com:topcoder-platform/community-app …
jmgasper Jan 22, 2026
fd3c338
Merge pull request #7171 from topcoder-platform/engagements
jmgasper Jan 22, 2026
74d0646
Revert "Strip out Gigs"
jmgasper Jan 23, 2026
d077734
Only hide gigs in navigation, not fully remove it.
jmgasper Jan 23, 2026
742c096
Timezone display issues on engagements
jmgasper Jan 23, 2026
fb63c27
QA fixes for engagements
jmgasper Jan 25, 2026
ca563eb
TZ updates for engagements
jmgasper Jan 26, 2026
67e5de3
Lint
jmgasper Jan 26, 2026
f29a432
Engagements feedback updates
jmgasper Feb 2, 2026
8700764
Fix for icons shrinking on large engagement strings
jmgasper Feb 3, 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
1 change: 0 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -171,4 +171,3 @@ RUN npm run build

EXPOSE 3000
CMD ["npm", "start"]

Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,10 @@ exports[`Default render 1`] = `
"href": "/challenges",
"title": "All Challenges",
},
Object {
"href": "/engagements",
"title": "Engagements",
},
Object {
"href": "/community/arena",
"title": "Competitive Programming",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"submissions": [{
"id": 520456,
"submittedAt": "2017-12-02T11:57Z",
"status": "Active",
"status": "ACTIVE",
"score": 100.0,
"placement": 1,
"challengeId": 30060905,
Expand Down Expand Up @@ -172,7 +172,7 @@
}, {
"id": 520452,
"submittedAt": "2017-12-02T11:11Z",
"status": "Active",
"status": "ACTIVE",
"score": 100.0,
"placement": 1,
"challengeId": 30060903,
Expand Down Expand Up @@ -370,7 +370,7 @@
}, {
"id": 246093,
"submittedAt": "2017-11-25T13:36Z",
"status": "Active",
"status": "ACTIVE",
"score": 100.0,
"placement": 1,
"challengeId": 30060687,
Expand Down Expand Up @@ -700,7 +700,7 @@
}, {
"id": 245457,
"submittedAt": "2017-11-13T22:25Z",
"status": "Active",
"status": "ACTIVE",
"score": 100.0,
"placement": 1,
"challengeId": 30060425,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ exports[`SubtrackChallengeView matches shallow snapshot 1`] = `
"id": 520456,
"placement": 1,
"score": 100,
"status": "Active",
"status": "ACTIVE",
"submissionImage": null,
"submittedAt": "2017-12-02T11:57Z",
"type": "Contest Submission",
Expand Down Expand Up @@ -343,7 +343,7 @@ exports[`SubtrackChallengeView matches shallow snapshot 1`] = `
"id": 520452,
"placement": 1,
"score": 100,
"status": "Active",
"status": "ACTIVE",
"submissionImage": null,
"submittedAt": "2017-12-02T11:11Z",
"type": "Contest Submission",
Expand Down Expand Up @@ -723,7 +723,7 @@ exports[`SubtrackChallengeView matches shallow snapshot 1`] = `
"id": 246093,
"placement": 1,
"score": 100,
"status": "Active",
"status": "ACTIVE",
"submissionImage": null,
"submittedAt": "2017-11-25T13:36Z",
"type": "Contest Submission",
Expand Down Expand Up @@ -939,7 +939,7 @@ exports[`SubtrackChallengeView matches shallow snapshot 1`] = `
"id": 245457,
"placement": 1,
"score": 100,
"status": "Active",
"status": "ACTIVE",
"submissionImage": null,
"submittedAt": "2017-11-13T22:25Z",
"type": "Contest Submission",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ exports[`Matches shallow shapshot 1 shapshot 1 1`] = `
<ChallengeTab
activeBucket="abc"
filterState={Object {}}
history={null}
location={Object {}}
previousBucketOfActiveTab={null}
previousBucketOfPastChallengesTab={null}
Expand Down Expand Up @@ -75,6 +76,7 @@ exports[`Matches shallow shapshot 2 shapshot 2 1`] = `
<ChallengeTab
activeBucket="abc"
filterState={Object {}}
history={null}
location={Object {}}
previousBucketOfActiveTab={null}
previousBucketOfPastChallengesTab={null}
Expand Down
33 changes: 33 additions & 0 deletions bin/www
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,38 @@ require('babel-register')({
],
});

/* Provide globalThis in older Node runtimes (e.g. Node 10). */
if (typeof globalThis === 'undefined') {
global.globalThis = global;
Copy link

Choose a reason for hiding this comment

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

[💡 maintainability]
Assigning globalThis to global is a workaround for older Node versions. Consider documenting this workaround in a separate documentation file or README to ensure future maintainability and clarity for developers unfamiliar with this context.

}

/* Provide crypto.sign/crypto.verify in older Node runtimes (e.g. Node 10). */
const crypto = require('crypto');
if (typeof crypto.sign !== 'function') {
Copy link

Choose a reason for hiding this comment

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

[💡 maintainability]
The polyfill for crypto.sign and crypto.verify is a workaround for older Node versions. Ensure that this is well-documented elsewhere in the project documentation to avoid confusion for developers who may not expect this behavior.

crypto.sign = (algorithm, data, key) => {
const signer = crypto.createSign(algorithm);
signer.update(data);
signer.end();
return signer.sign(key);
};
}
if (typeof crypto.verify !== 'function') {
crypto.verify = (algorithm, data, key, signature) => {
const verifier = crypto.createVerify(algorithm);
verifier.update(data);
verifier.end();
return verifier.verify(key, signature);
};
}

/* Provide TextEncoder/TextDecoder in older Node runtimes (e.g. Node 10). */
const { TextDecoder, TextEncoder } = require('util');
if (typeof global.TextEncoder === 'undefined') {
Copy link

Choose a reason for hiding this comment

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

[💡 maintainability]
The polyfill for TextEncoder and TextDecoder is a workaround for older Node versions. Consider documenting this in a separate documentation file or README to ensure future maintainability and clarity for developers unfamiliar with this context.

global.TextEncoder = TextEncoder;
}
if (typeof global.TextDecoder === 'undefined') {
global.TextDecoder = TextDecoder;
}

/* Runs the ExpressJS startup script. */
require('../src/server');
6 changes: 6 additions & 0 deletions config/default.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ module.exports = {
V4: 'https://api.topcoder-dev.com/v4',
V5: 'https://api.topcoder-dev.com/v5',
V6: 'https://api.topcoder-dev.com/v6',
ENGAGEMENTS: 'https://api.topcoder-dev.com/v6/engagements/engagements',
MM_BROKER: '/api',
},

Expand Down Expand Up @@ -106,6 +107,7 @@ module.exports = {
COMMUNITY_APP: 'https://community-app.topcoder-dev.com',
CHALLENGES_URL: 'https://www.topcoder-dev.com/challenges',
COPILOTS_URL: 'https://copilots.topcoder-dev.com',
ENGAGEMENTS_APP: 'https://engagements.topcoder-dev.com',
TCO_OPEN_URL: 'https://www.topcoder-dev.com/community/member-programs/topcoder-open',
ARENA: 'https://arena.topcoder-dev.com',
AUTH: 'https://accounts-auth0.topcoder-dev.com',
Expand Down Expand Up @@ -336,6 +338,10 @@ module.exports = {
title: 'All Challenges',
href: '/challenges',
},
{
title: 'Engagements',
href: '/engagements',
},
{
title: 'Competitive Programming',
href: '/community/arena',
Expand Down
4 changes: 4 additions & 0 deletions config/development.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
module.exports = {
SEGMENT_IO_API_KEY: 'QBtLgV8vCiuRX1lDikbMjcoe9aCHkF6n',
Copy link

Choose a reason for hiding this comment

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

[❗❗ security]
Storing API keys directly in the codebase is a security risk. Consider using environment variables or a secure vault to manage sensitive information.

SERVER_API_KEY: '79b2d5eb-c1fd-42c4-9391-6b2c9780d591',
Copy link

Choose a reason for hiding this comment

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

[❗❗ security]
Storing API keys directly in the codebase is a security risk. Consider using environment variables or a secure vault to manage sensitive information.

API: {
ENGAGEMENTS: 'https://api.topcoder-dev.com/v6/engagements/engagements',
},
URL: {
USER_SETTINGS: '', /* No dev server is available for saved searches */
ENGAGEMENTS_APP: 'https://engagements.topcoder-dev.com',
REVIEW_API_URL: '/reviewTypes',
},
PLATFORM_SITE_URL: 'https://platform.topcoder-dev.com',
Expand Down
6 changes: 6 additions & 0 deletions config/production.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ module.exports = {
V4: 'https://api.topcoder.com/v4',
V5: 'https://api.topcoder.com/v5',
V6: 'https://api.topcoder.com/v6',
ENGAGEMENTS: 'https://api.topcoder.com/v6/engagements/engagements',
},
AUTH0: {
DOMAIN: 'topcoder.auth0.com',
Expand All @@ -28,6 +29,7 @@ module.exports = {
COMMUNITY_APP: 'https://community-app.topcoder.com',
CHALLENGES_URL: 'https://www.topcoder.com/challenges',
COPILOTS_URL: 'https://copilots.topcoder.com',
ENGAGEMENTS_APP: 'https://engagements.topcoder.com',
TCO_OPEN_URL: 'https://www.topcoder.com/community/member-programs/topcoder-open',

AUTH: 'https://accounts-auth0.topcoder.com',
Expand Down Expand Up @@ -127,6 +129,10 @@ module.exports = {
title: 'All Challenges',
href: '/challenges?ref=nav',
},
{
title: 'Engagements',
href: '/engagements?ref=nav',
},
{
title: 'Competitive Programming',
href: '/community/arena?ref=nav',
Expand Down
4 changes: 4 additions & 0 deletions config/qa.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
module.exports = {
SEGMENT_IO_API_KEY: 'QBtLgV8vCiuRX1lDikbMjcoe9aCHkF6n',
Copy link

Choose a reason for hiding this comment

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

[❗❗ security]
The SEGMENT_IO_API_KEY is hardcoded in the configuration file. Consider using environment variables to manage sensitive information securely.

SERVER_API_KEY: '79b2d5eb-c1fd-42c4-9391-6b2c9780d591',
Copy link

Choose a reason for hiding this comment

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

[❗❗ security]
The SERVER_API_KEY is hardcoded in the configuration file. Consider using environment variables to manage sensitive information securely.

API: {
ENGAGEMENTS: 'https://api.topcoder-qa.com/v6/engagements/engagements',
},
URL: {
USER_SETTINGS: '', /* No qa server is available for saved searches */
ENGAGEMENTS_APP: 'https://engagements.topcoder-qa.com',
},
PLATFORM_SITE_URL: 'https://platform.topcoder-qa.com',
PLATFORMUI_SITE_URL: 'https://platform-ui.topcoder-qa.com',
Expand Down
6 changes: 6 additions & 0 deletions config/test.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
module.exports = {
SERVER_API_KEY: '79b2d5eb-c1fd-42c4-9391-6b2c9780d591',
Copy link

Choose a reason for hiding this comment

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

[❗❗ security]
Storing sensitive information like SERVER_API_KEY directly in the codebase can lead to security vulnerabilities. Consider using environment variables or a secure vault to manage sensitive data.

API: {
ENGAGEMENTS: 'https://api.topcoder-dev.com/v6/engagements/engagements',
Copy link

Choose a reason for hiding this comment

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

[⚠️ maintainability]
Ensure that the API endpoint https://api.topcoder-dev.com/v6/engagements/engagements is not hardcoded for production use. Consider using environment-specific configurations to manage different API endpoints for development, testing, and production environments.

},
URL: {
ENGAGEMENTS_APP: 'https://engagements.topcoder-dev.com',
Copy link

Choose a reason for hiding this comment

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

[⚠️ maintainability]
The URL https://engagements.topcoder-dev.com should be configurable based on the environment to avoid hardcoding production URLs in the codebase. This will improve the maintainability and flexibility of the application.

},
};
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@
"supertest": "^3.1.0",
"tc-core-library-js": "github:topcoder-platform/tc-core-library-js#master",
"tc-ui": "^1.0.12",
"topcoder-react-lib": "github:topcoder-platform/topcoder-react-lib#develop",
"topcoder-react-lib": "github:topcoder-platform/topcoder-react-lib#v6",
"topcoder-react-ui-kit": "2.0.1",
"topcoder-react-utils": "github:topcoder-platform/topcoder-react-utils#v6",
"turndown": "^4.0.2",
Expand Down
47 changes: 47 additions & 0 deletions src/shared/actions/engagements.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import _ from 'lodash';
import { createActions } from 'redux-actions';
import { errors } from 'topcoder-react-lib';
import getEngagements from 'services/engagements';

const { fireErrorMessage } = errors;

const PAGE_SIZE = 10;

function getEngagementsInit(uuid, page, filters) {
return { uuid, page, filters };
}

async function getEngagementsDone(uuid, page, filters, tokenV3) {
Copy link

Choose a reason for hiding this comment

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

[⚠️ correctness]
Consider adding input validation for uuid, page, filters, and tokenV3 to ensure they are of the expected types and values before proceeding with the function logic. This can prevent unexpected errors and improve the robustness of the function.

try {
const { engagements, meta } = await getEngagements(page, PAGE_SIZE, filters, tokenV3);
Copy link

Choose a reason for hiding this comment

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

[⚠️ performance]
The getEngagements function call should handle potential errors that could arise from network issues or unexpected responses. Consider implementing retry logic or more granular error handling to improve resilience.


return {
uuid,
engagements,
meta,
page,
};
} catch (error) {
const { message: errorMessage } = error || {};
let message = 'Unknown error';
if (errorMessage) {
message = errorMessage;
} else if (typeof error === 'string') {
message = error;
}
fireErrorMessage('Error Loading Engagements', message);
Copy link

Choose a reason for hiding this comment

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

[💡 maintainability]
The fireErrorMessage function is used here to display an error message, but it might be beneficial to log the error details as well for debugging purposes. Consider adding a logging mechanism to capture the full error stack or details.

const rejection = error instanceof Error ? error : new Error(message);
rejection.uuid = uuid;
rejection.originalError = error;
return Promise.reject(rejection);
}
}

export default createActions({
ENGAGEMENTS: {
GET_ENGAGEMENTS_INIT: getEngagementsInit,
GET_ENGAGEMENTS_DONE: getEngagementsDone,
DROP_ENGAGEMENTS: _.noop,
SET_FILTER: _.identity,
},
});
26 changes: 16 additions & 10 deletions src/shared/components/GUIKit/DropdownSingleSkills/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@ function DropdownSingleSkills({
loadOptions,
createText,
}) {
let normalizedTerms = null;
if (terms && typeof terms === 'object') {
normalizedTerms = terms;
} else if (terms) {
normalizedTerms = { value: terms, label: terms };
}
const containerRef = useRef(null);
useEffect(() => {
const selectInput = containerRef.current.getElementsByClassName('Select-input');
Expand Down Expand Up @@ -79,17 +85,11 @@ function DropdownSingleSkills({
<AsyncCreatable
autosize={false}
optionComponent={CustomReactSelectRow}
value={terms ? {
value: terms,
label: terms,
} : null}
value={normalizedTerms}
onChange={(value) => {
onChange(value ? (value.value || '') : '');
onChange(value || null);
Copy link

Choose a reason for hiding this comment

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

[❗❗ correctness]
Changing onChange(value ? (value.value || '') : '') to onChange(value || null) alters the behavior when value is an object with a value property. Previously, it would pass an empty string if value.value was falsy, but now it passes null. Ensure this change is intentional and that downstream logic can handle null appropriately.

}}
defaultValue={terms ? {
value: terms,
label: terms,
} : null}
defaultValue={normalizedTerms}
promptTextCreator={value => `${createText} "${value}"`}
placeholder={`${placeholder}${placeholder && required ? ' *' : ''}`}
cacheOptions={cacheOptions}
Expand Down Expand Up @@ -120,7 +120,13 @@ DropdownSingleSkills.defaultProps = {
};

DropdownSingleSkills.propTypes = {
terms: PT.string,
terms: PT.oneOfType([
PT.string,
PT.shape({
label: PT.string,
value: PT.string,
}),
]),
placeholder: PT.string,
label: PT.string,
required: PT.bool,
Expand Down
25 changes: 18 additions & 7 deletions src/shared/components/GUIKit/SearchCombo/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,14 @@ function SearchCombo({
} else {
getService(auth.tokenV3).getSkills(inputValue).then(
(response) => {
const suggestedOptions = (response || []).map(skillItem => ({
label: skillItem.name,
value: skillItem.name,
}));
const suggestedOptions = (response || [])
.map((skillItem) => {
const label = skillItem && (skillItem.name || skillItem.label || skillItem.title);
Copy link

Choose a reason for hiding this comment

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

[⚠️ correctness]
The mapping logic for label and value is flexible but could lead to unexpected results if skillItem has multiple properties like name, label, and title. Consider explicitly prioritizing these properties to ensure consistent behavior.

if (!label) return null;
const value = skillItem.id || skillItem.skillId || skillItem.value || label;
Copy link

Choose a reason for hiding this comment

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

[⚠️ correctness]
The logic for determining value is potentially problematic. If skillItem has both id and skillId, the choice of id over skillId might not be intentional. Clarify the priority or document the expected structure of skillItem.

return { label, value };
})
.filter(Boolean);
return callback(null, {
options: suggestedOptions,
});
Expand All @@ -40,8 +44,9 @@ function SearchCombo({
terms={skills}
placeholder={placeholder}
onChange={(newSkill) => {
setSkills(newSkill);
onSearch(newSkill);
const nextSkill = newSkill || '';
Copy link

Choose a reason for hiding this comment

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

[⚠️ correctness]
Using newSkill || '' ensures nextSkill is always a string, which is good for consistency. However, if newSkill can be an object, this might mask potential issues. Ensure newSkill is always the expected type before this assignment.

setSkills(nextSkill);
onSearch(nextSkill);
}}
cacheOptions
loadOptions={fetchSkills}
Expand All @@ -58,7 +63,13 @@ SearchCombo.defaultProps = {
};

SearchCombo.propTypes = {
term: PT.string,
term: PT.oneOfType([
PT.string,
PT.shape({
label: PT.string,
value: PT.string,
}),
]),
placeholder: PT.string,
onSearch: PT.func.isRequired,
auth: PT.object,
Expand Down
Loading
Loading