diff --git a/src/shared/containers/EDU/Tracks.jsx b/src/shared/containers/EDU/Tracks.jsx
index e2190d0ca1..43b3df5643 100644
--- a/src/shared/containers/EDU/Tracks.jsx
+++ b/src/shared/containers/EDU/Tracks.jsx
@@ -24,7 +24,6 @@ import DS from 'assets/images/img-data-science.png';
import Algo from 'assets/images/img-algorithm.png';
import QA from 'assets/images/img-QA.png';
import Topcoder from 'assets/images/img-Topcoder.png';
-import GigWork from 'assets/images/img-gig-work.png';
import iconFilterArrow from 'assets/images/tc-edu/icon-filter-arrow.png';
// Partials
import ResultTabs from './partials/ResultTabs';
@@ -38,7 +37,6 @@ const TRACK_BANNER_BACK_COLORS = {
'Competitive Programming': '#FFA45D',
QA: '#8AFB8A',
Topcoder: '#2A2A2A',
- 'Gig Work': '#ef476f',
};
const TRACK_IMAGES = {
Development: Dev,
@@ -47,7 +45,6 @@ const TRACK_IMAGES = {
'Competitive Programming': Algo,
QA,
Topcoder,
- 'Gig Work': GigWork,
};
const SORT_BY_OPTIONS = [
{ label: 'Content Publish Date', selected: true },
diff --git a/src/shared/containers/EDU/styles/home.scss b/src/shared/containers/EDU/styles/home.scss
index 1dc0c6c6dd..94a1b7bb33 100644
--- a/src/shared/containers/EDU/styles/home.scss
+++ b/src/shared/containers/EDU/styles/home.scss
@@ -199,14 +199,6 @@
height: 71px;
}
- .trackIconGigs {
- display: flex;
- justify-content: center;
- align-items: center;
- width: 74px;
- height: 75px;
- }
-
.trackIconTC {
background-repeat: no-repeat;
background-size: cover;
diff --git a/src/shared/containers/Gigs/RecruitCRMJobApply.jsx b/src/shared/containers/Gigs/RecruitCRMJobApply.jsx
deleted file mode 100644
index dd75721b06..0000000000
--- a/src/shared/containers/Gigs/RecruitCRMJobApply.jsx
+++ /dev/null
@@ -1,357 +0,0 @@
-/**
- * Apply for a job page
- */
-
-import _ from 'lodash';
-import actions from 'actions/recruitCRM';
-import GigApply from 'components/Gigs/GigApply';
-import LoadingIndicator from 'components/LoadingIndicator';
-import PT from 'prop-types';
-import React from 'react';
-import { connect } from 'react-redux';
-import { isValidEmail } from 'utils/tc';
-import { withOptimizely } from '@optimizely/react-sdk';
-
-
-const cookies = require('browser-cookies');
-const countries = require('i18n-iso-countries');
-countries.registerLocale(require('i18n-iso-countries/langs/en.json'));
-
-class RecruitCRMJobApplyContainer extends React.Component {
- constructor(props) {
- super(props);
- // initial state
- this.state = {
- formErrors: {},
- formData: {
- skills: [],
- durationConfirm: [{ label: 'Yes', value: false }, { label: 'No', value: false }],
- timezoneConfirm: [{ label: 'Yes', value: false }, { label: 'No', value: false }],
- agreedTerms: false,
- country: _.map(countries.getNames('en'), val => ({ label: val, selected: false })),
- reffereal: [
- { label: 'Google', selected: false },
- { label: 'LinkedIn', selected: false },
- { label: 'Other Ad or Promotion', selected: false },
- { label: 'Quora', selected: false },
- { label: 'Referral', selected: false },
- { label: 'Topcoder Newsletter', selected: false },
- { label: 'Uprisor Podcast', selected: false },
- { label: 'YouTube or Video Ad', selected: false },
- ],
- // eslint-disable-next-line react/destructuring-assignment
- },
- };
-
- // binds
- this.onFormInputChange = this.onFormInputChange.bind(this);
- this.onApplyClick = this.onApplyClick.bind(this);
- this.validateForm = this.validateForm.bind(this);
- }
-
- // eslint-disable-next-line consistent-return
- componentDidMount() {
- const { formData } = this.state;
- const { user, recruitProfile, searchCandidates } = this.props;
- if (user) {
- if (!recruitProfile) searchCandidates(user.email);
- else {
- const { country, skills } = formData;
- const recruitSkills = recruitProfile.skill.split(',');
- let skillsValues = (skills || []).map(s => s.label);
- skillsValues = _.uniq([
- ...skillsValues,
- ...recruitSkills,
- ]);
-
- return this.setState({
- formData: _.merge(formData, user, {
- phone: recruitProfile.contact_number,
- country: _.map(
- country,
- c => ({
- label: c.label,
- selected: c.label.toLowerCase() === recruitProfile.locality.toLowerCase(),
- }),
- ),
- skills: skillsValues.map(s => ({
- label: s,
- selected: true,
- })),
- payExpectation: recruitProfile.salary_expectation,
- }),
- });
- }
- this.setState({
- formData: _.merge(formData, user),
- });
- }
- }
-
- componentDidUpdate(prevProps) {
- const { recruitProfile, user } = this.props;
- if (recruitProfile !== prevProps.recruitProfile && !_.isEmpty(recruitProfile)) {
- // when recruit profile loaded
- const { formData } = this.state;
- const { country, skills } = formData;
- const recruitSkills = recruitProfile.skill.split(',');
-
- let skillsValues = (skills || []).map(s => s.label);
- skillsValues = _.uniq([
- ...skillsValues,
- ...recruitSkills,
- ]);
-
- const updatedForm = {
- formData: _.merge(formData, user, {
- phone: recruitProfile.contact_number,
- country: _.map(
- country,
- c => ({
- label: c.label,
- selected: c.label.toLowerCase() === recruitProfile.locality.toLowerCase(),
- }),
- ),
- skills: skillsValues.map(s => ({
- label: s,
- selected: true,
- })),
- payExpectation: recruitProfile.salary_expectation,
- }),
- };
- // eslint-disable-next-line react/no-did-update-set-state
- this.setState(updatedForm);
- }
- }
-
- onFormInputChange(key, value) {
- // update the state
- this.setState(state => ({
- ...state,
- formData: {
- ...state.formData,
- [key]: value,
- },
- }));
- this.validateForm(key);
- }
-
- onApplyClick() {
- const {
- applyForJob, job, optimizely, auth,
- } = this.props;
- const { formData } = this.state;
- this.validateForm();
- this.setState((state) => {
- if (_.isEmpty(state.formErrors)) {
- applyForJob(job, formData, auth.tokenV3);
- optimizely.track('Submit Application Form');
- const isFeatured = _.find(job.custom_fields, ['field_name', 'Featured']);
- const jobTags = _.find(job.custom_fields, ['field_name', 'Job Tag']);
- let hotListCookie = cookies.get('_tc.hcl');
- if (isFeatured && isFeatured.value) {
- optimizely.track('Submit to Featured Gigs');
- }
- if (jobTags && jobTags.value) {
- optimizely.track('Submit to Tagged Gigs');
- }
- if (hotListCookie) {
- hotListCookie = JSON.parse(hotListCookie);
- if (hotListCookie.slug === job.slug) {
- optimizely.track('Submit to Hotlist Gigs');
- cookies.erase('_tc.hcl');
- }
- }
- }
- });
- }
-
- validateForm(prop) {
- this.setState((state) => {
- const { formData, formErrors } = state;
- const { recruitProfile } = this.props;
- // Form validation happens here
- const requiredTextFields = [
- 'fname', 'lname', 'city', 'phone', 'email',
- ];
- // check required text fields for value
- // check min/max lengths
- _.each(requiredTextFields, (key) => {
- // validate only modified prop if set
- // and do not touch the others
- if (prop && prop !== key) return;
- if (!formData[key] || !_.trim(formData[key])) formErrors[key] = 'Required field';
- else if (formData[key] && _.trim(formData[key]).length < 2) formErrors[key] = 'Must be at least 2 characters';
- else if (formData[key] && _.trim(formData[key]).length > 2) {
- switch (key) {
- case 'city':
- case 'phone':
- if (_.trim(formData[key]).length > 50) formErrors[key] = 'Must be max 50 characters';
- else delete formErrors[key];
- break;
- default:
- if (_.trim(formData[key]).length > 40) formErrors[key] = 'Must be max 40 characters';
- else delete formErrors[key];
- break;
- }
- } else delete formErrors[key];
- });
- // check for selected country
- if (!prop || prop === 'country') {
- if (!_.find(formData.country, { selected: true })) formErrors.country = 'Please, select your country';
- else delete formErrors.country;
- }
- // check for selected reffereal
- if (!prop || prop === 'reffereal') {
- if (_.isEmpty(recruitProfile)) {
- if (!_.find(formData.reffereal, { selected: true })) formErrors.reffereal = 'Please, select your reffereal';
- else delete formErrors.reffereal;
- }
- }
- // check payExpectation to be a number
- if (!prop || prop === 'payExpectation') {
- if (formData.payExpectation && _.trim(formData.payExpectation)) {
- if (!_.isInteger(_.toNumber(formData.payExpectation))) formErrors.payExpectation = 'Must be integer value in $';
- else delete formErrors.payExpectation;
- } else formErrors.payExpectation = 'Required field';
- }
- // check for valid email
- if (!prop || prop === 'email') {
- if (formData.email && _.trim(formData.email)) {
- if (!(isValidEmail(formData.email))) formErrors.email = 'Invalid email';
- else delete formErrors.email;
- }
- }
- // require atleast 1 skill
- if (!prop || prop === 'skills') {
- const skills = _.filter(formData.skills, ['selected', true]);
- if (!skills.length) formErrors.skills = 'Please, add technical skills';
- else if (skills.map(skill => skill.label).join(',').length >= 100) formErrors.skills = 'Sum of all skill characters may not be greater than 100';
- else delete formErrors.skills;
- }
- // have accepted terms
- if (!prop || prop === 'agreedTerms') {
- if (!formData.agreedTerms) formErrors.agreedTerms = 'Please, accept our terms';
- else delete formErrors.agreedTerms;
- }
- // has CV file ready for upload
- if (!prop || prop === 'fileCV') {
- if (!formData.fileCV && _.isEmpty(recruitProfile)) formErrors.fileCV = 'Please, pick your CV file for uploading';
- else if (formData.fileCV) {
- const sizeInMB = (formData.fileCV.size / (1024 * 1024)).toFixed(2);
- if (sizeInMB > 8) {
- formErrors.fileCV = 'Max file size is limited to 8 MB';
- delete formData.fileCV;
- } else if (_.endsWith(formData.fileCV.name, '.pdf') || _.endsWith(formData.fileCV.name, '.docx')) {
- delete formErrors.fileCV;
- } else {
- formErrors.fileCV = 'Only .pdf and .docx files are allowed';
- }
- }
- }
- // timezone
- if (!prop || prop === 'timezoneConfirm') {
- const a = _.find(formData[prop], { value: true });
- if (a) {
- if (a.label === 'No') formErrors[prop] = 'Sorry, we are only looking for candidates that can work the hours and duration listed';
- else delete formErrors[prop];
- } else if (prop) formErrors[prop] = 'Required field';
- else if (!prop && !_.find(formData.timezoneConfirm, { value: true })) formErrors.timezoneConfirm = 'Required field';
- }
- // duration
- if (!prop || prop === 'durationConfirm') {
- const a = _.find(formData[prop], { value: true });
- if (a) {
- if (a.label === 'No') formErrors[prop] = 'Sorry, we are only looking for candidates that can work the hours and duration listed';
- else delete formErrors[prop];
- } else if (prop) formErrors[prop] = 'Required field';
- else if (!prop && !_.find(formData.durationConfirm, { value: true })) formErrors.durationConfirm = 'Required field';
- }
- // updated state
- return {
- ...state,
- formErrors,
- };
- });
- }
-
- render() {
- const { formErrors, formData } = this.state;
- const { recruitProfile, user } = this.props;
- return !recruitProfile && user ?
: (
-
- );
- }
-}
-
-RecruitCRMJobApplyContainer.defaultProps = {
- user: null,
- applying: false,
- application: null,
- recruitProfile: null,
- auth: {},
-};
-
-RecruitCRMJobApplyContainer.propTypes = {
- job: PT.shape().isRequired,
- user: PT.shape(),
- applyForJob: PT.func.isRequired,
- applying: PT.bool,
- application: PT.shape(),
- searchCandidates: PT.func.isRequired,
- recruitProfile: PT.shape(),
- optimizely: PT.shape().isRequired,
- auth: PT.object,
-};
-
-function mapStateToProps(state, ownProps) {
- const { profile } = state.auth;
- const { job } = ownProps;
- let userData = null;
- if (profile && profile.email) {
- userData = {
- fname: profile.firstName,
- lname: profile.lastName,
- email: profile.email,
- city: profile.addresses && profile.addresses[0] ? profile.addresses[0].city : '',
- handle: profile.handle,
- };
- }
- return {
- user: userData,
- applying: state.recruitCRM && state.recruitCRM[job.slug]
- ? state.recruitCRM[job.slug].applying : false,
- application: state.recruitCRM && state.recruitCRM[job.slug]
- ? state.recruitCRM[job.slug].application : null,
- recruitProfile: state.recruitCRM && profile && state.recruitCRM[profile.email]
- ? state.recruitCRM[profile.email].profile : null,
- auth: {
- ...state.auth,
- },
- };
-}
-
-function mapDispatchToActions(dispatch) {
- const a = actions.recruit;
- return {
- applyForJob: (job, payload, tokenV3) => {
- dispatch(a.applyForJobInit(job, payload));
- dispatch(a.applyForJobDone(job, payload, tokenV3));
- },
- searchCandidates: (email) => {
- dispatch(a.searchCandidatesInit(email));
- dispatch(a.searchCandidatesDone(email));
- },
- };
-}
-
-export default connect(
- mapStateToProps,
- mapDispatchToActions,
-)(withOptimizely(RecruitCRMJobApplyContainer));
diff --git a/src/shared/containers/Gigs/RecruitCRMJobDetails.jsx b/src/shared/containers/Gigs/RecruitCRMJobDetails.jsx
deleted file mode 100644
index 130c84073e..0000000000
--- a/src/shared/containers/Gigs/RecruitCRMJobDetails.jsx
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * A block that fetches and renders a job details page
- * driven by recruitCRM
- */
-
-import { isEmpty } from 'lodash';
-import actions from 'actions/recruitCRM';
-import LoadingIndicator from 'components/LoadingIndicator';
-import GigDetails from 'components/Gigs/GigDetails';
-import PT from 'prop-types';
-import React from 'react';
-import { connect } from 'react-redux';
-import RecruitCRMJobApply from './RecruitCRMJobApply';
-
-class RecruitCRMJobDetailsContainer extends React.Component {
- componentDidMount() {
- const {
- getJob,
- id,
- job,
- } = this.props;
-
- if (isEmpty(job)) {
- getJob(id);
- }
- }
-
- render() {
- const {
- loading,
- job,
- isApply,
- application,
- profile,
- } = this.props;
-
- if (loading) {
- return
;
- }
-
- return isApply
- ?
- : (
-
- );
- }
-}
-
-RecruitCRMJobDetailsContainer.defaultProps = {
- job: {},
- application: null,
- profile: {},
-};
-
-RecruitCRMJobDetailsContainer.propTypes = {
- getJob: PT.func.isRequired,
- loading: PT.bool.isRequired,
- job: PT.shape(),
- id: PT.string.isRequired,
- isApply: PT.bool.isRequired,
- application: PT.shape(),
- profile: PT.shape(),
-};
-
-function mapStateToProps(state, ownProps) {
- const data = state.recruitCRM[ownProps.id];
- const profile = state.auth && state.auth.profile ? { ...state.auth.profile } : {};
- return {
- job: data ? data.job : {},
- loading: data ? data.loading : true,
- application: data ? data.application : null,
- profile,
- };
-}
-
-function mapDispatchToActions(dispatch) {
- const a = actions.recruit;
- return {
- getJob: (id) => {
- dispatch(a.getJobInit(id));
- dispatch(a.getJobDone(id));
- },
- };
-}
-
-export default connect(
- mapStateToProps,
- mapDispatchToActions,
-)(RecruitCRMJobDetailsContainer);
diff --git a/src/shared/containers/Gigs/RecruitCRMJobs.jsx b/src/shared/containers/Gigs/RecruitCRMJobs.jsx
deleted file mode 100644
index 6d146e1338..0000000000
--- a/src/shared/containers/Gigs/RecruitCRMJobs.jsx
+++ /dev/null
@@ -1,348 +0,0 @@
-/**
- * A block that fetches and renders a job listing page
- * driven by recruitCRM
- */
-import _ from 'lodash';
-import actions from 'actions/recruitCRM';
-import LoadingIndicator from 'components/LoadingIndicator';
-import SearchCombo from 'components/GUIKit/SearchCombo';
-import Paginate from 'components/GUIKit/Paginate';
-import JobListCard from 'components/GUIKit/JobListCard';
-import Dropdown from 'components/GUIKit/Dropdown';
-import PT from 'prop-types';
-import React from 'react';
-import { connect } from 'react-redux';
-import { getSalaryType, getCustomField } from 'utils/gigs';
-import IconBlackLocation from 'assets/images/icon-black-location.svg';
-import { config, Link, isomorphy } from 'topcoder-react-utils';
-import { getQuery, updateQuery } from 'utils/url';
-import { withOptimizely } from '@optimizely/react-sdk';
-import GigHeader from 'components/Gigs/GigHeader';
-import './jobLisingStyles.scss';
-
-const cookies = require('browser-cookies');
-
-const GIGS_PER_PAGE = 10;
-// Sort by dropdown
-const sortByOptions = [
- { label: 'Latest Added Descending', selected: true },
- { label: 'Latest Updated Descending', selected: false },
-];
-// Locations
-let locations = [{
- label: 'All', selected: true,
-}];
-
-class RecruitCRMJobsContainer extends React.Component {
- constructor(props) {
- super(props);
- // Filter initial state
- this.state = {
- term: '',
- page: 0,
- sortBy: 'created_on',
- location: 'All',
- };
- // binds
- this.onSearch = this.onSearch.bind(this);
- this.onPaginate = this.onPaginate.bind(this);
- this.onFilter = this.onFilter.bind(this);
- this.onLocation = this.onLocation.bind(this);
- this.onSort = this.onSort.bind(this);
- this.onHotlistClick = this.onHotlistClick.bind(this);
- }
-
- componentDidMount() {
- const {
- getJobs,
- jobs,
- getJobApplications,
- auth,
- } = this.props;
- const { state } = this;
- const q = getQuery();
- // This gets all jobs.
- // Pagination and filtering on front-side
- if (!jobs.length) {
- getJobs({
- job_status: 1, // Open jobs only
- });
- }
- // handle URL query if present
- if (q && q.search) {
- const stateUpdate = {
- ...state,
- term: q.search,
- };
- this.setState(stateUpdate);
- }
- if (auth.tokenV3) {
- getJobApplications(auth.tokenV3);
- }
- }
-
- /**
- * Wraps all calls to setState
- * @param {Object} newState the state update
- */
- onFilter(newState) {
- // Do updates
- // update the state
- this.setState(newState);
- }
-
- onSearch(newTerm) {
- this.onFilter({
- term: newTerm,
- page: 0,
- });
- // update the URL query
- updateQuery({
- search: newTerm,
- });
- }
-
- onPaginate(newPage) {
- this.onFilter({
- page: newPage.selected,
- });
- window.scrollTo({
- top: 0,
- behavior: 'smooth',
- });
- }
-
- onLocation(newLocation) {
- const selected = _.find(newLocation, { selected: true });
- this.onFilter({
- location: selected.label,
- page: 0,
- });
- }
-
- onSort(newSort) {
- const selected = _.find(newSort, { selected: true });
- this.onFilter({
- sortBy: selected.label === 'Latest Updated Descending' ? 'updated_on' : 'created_on',
- page: 0,
- });
- }
-
- onHotlistClick(job) {
- const { optimizely } = this.props;
- optimizely.track('Hotlist ads click');
- cookies.set('_tc.hcl', JSON.stringify({
- slug: job.slug,
- }), {
- expires: 0,
- });
- }
-
- render() {
- const {
- loading,
- jobs,
- optimizely,
- applications,
- auth,
- } = this.props;
- const {
- term,
- page,
- sortBy,
- location,
- } = this.state;
-
- if (loading) {
- return (
-
-
- Searching our database for the best gigs…
-
- );
- }
-
- // optimizely decide
- let decision = { enabled: true };
- if (isomorphy.isClientSide()) {
- // decision = optimizely.decide('gig_listing_hotlist');
- decision = optimizely.decide('gig_listing_hotlist_center');
- }
- let jobsToDisplay = jobs;
- // build hotlist of jobs if present
- let hotlistJobs = _.filter(jobs, (job) => {
- const showInHotlist = _.find(job.custom_fields, ['field_name', 'Show in Hotlist']);
- return showInHotlist && showInHotlist.value;
- });
- hotlistJobs = hotlistJobs.sort((a, b) => new Date(b.updated_on) - new Date(a.updated_on));
- hotlistJobs = _.slice(hotlistJobs, 0, 4);
- // build current locations dropdown based on all data
- // and filter by selected location
- jobsToDisplay = _.filter(jobs, (job) => {
- const country = _.trim(!job.country || job.country === 'Anywhere' || job.country === 'Any' ? 'All' : job.country);
- // build dropdown
- const found = _.findIndex(locations, l => l.label.toLowerCase() === country.toLowerCase());
- if (found === -1) {
- locations.push({
- label: country, selected: location.toLowerCase() === country.toLowerCase(),
- });
- } else {
- locations[found].selected = location.toLowerCase() === country.toLowerCase();
- }
- locations[0].selected = location === 'All';
- // filter
- if (location === 'Anywhere' || location === 'Any' || location === 'All') return true;
- return location.toLowerCase() === (job.country || '').toLowerCase();
- });
- // sort location dropdown
- locations = _.sortBy(locations, ['label']);
- // Filter by term
- if (term) {
- jobsToDisplay = _.filter(jobsToDisplay, (job) => {
- // eslint-disable-next-line no-underscore-dangle
- const _term = term.toLowerCase();
- // name search
- if (job && job.name && job.name.toLowerCase().includes(_term)) return true;
- // skills search
- const skills = _.find(job.custom_fields, ['field_name', 'Technologies Required']);
- if (skills && skills.value && skills.value.toLowerCase().includes(_term)) return true;
- // location
- if ((job.country || '').toLowerCase().includes(_term)) return true;
- // duration
- const duration = _.find(job.custom_fields, ['field_name', 'Duration']);
- if (duration && duration.value && duration.value.toLowerCase().includes(_term)) return true;
- // no match
- return false;
- });
- }
- // Sort controlled by sortBy state
- jobsToDisplay = jobsToDisplay.sort((a, b) => {
- // sort featured gigs first no matter the sortBy
- const featuredA = getCustomField(a.custom_fields, 'Featured');
- const featuredB = getCustomField(b.custom_fields, 'Featured');
- if (featuredB !== 'n/a' && featuredA === 'n/a') return Number.MAX_VALUE;
- if (featuredB === 'n/a' && featuredA !== 'n/a') return -Number.MIN_VALUE;
- return new Date(b[sortBy]) - new Date(a[sortBy]);
- });
- // Calc pages
- const pages = Math.ceil(jobsToDisplay.length / GIGS_PER_PAGE);
- // Paginate the results
- jobsToDisplay = _.slice(
- jobsToDisplay,
- page * GIGS_PER_PAGE, (page * GIGS_PER_PAGE) + GIGS_PER_PAGE,
- );
- // hot list of gigs
- let isHotlistRendered = false;
- const hotlist = () => (
-
-
- {
- hotlistJobs.map((hjob, indx) => (
-
this.onHotlistClick(hjob)}>
-
{hjob.country}
-
{hjob.name}
-
${hjob.min_annual_salary} - {hjob.max_annual_salary} / {getSalaryType(hjob.salary_type)}
-
- ))
- }
-
-
- );
-
- return (
-
-
-
-
-
-
-
- {auth.tokenV3 && applications > 0 &&
}
-
- {
- jobsToDisplay.length
- ? jobsToDisplay.map((job, indx) => {
- const featured = getCustomField(job.custom_fields, 'Featured');
- if ((featured === 'n/a' || indx === 2) && !isHotlistRendered && hotlistJobs.length && decision.enabled) {
- isHotlistRendered = true;
- return (
-
- {hotlist()}
-
-
- );
- }
- return ;
- })
- : (
-
- {
- hotlistJobs.length && decision.enabled && hotlist()
- }
- No Results
-
- )
- }
-
- {
- jobsToDisplay.length
- ?
: null
- }
-
-
- );
- }
-}
-
-RecruitCRMJobsContainer.defaultProps = {
- jobs: [],
- loading: true,
- applications: 0,
- auth: {},
-};
-
-RecruitCRMJobsContainer.propTypes = {
- getJobs: PT.func.isRequired,
- loading: PT.bool,
- jobs: PT.arrayOf(PT.shape),
- optimizely: PT.shape().isRequired,
- getJobApplications: PT.func.isRequired,
- applications: PT.number,
- auth: PT.object,
-};
-
-function mapStateToProps(state) {
- const data = state.recruitCRM;
- return {
- jobs: data ? data.jobs : [],
- loading: data ? data.loading : true,
- applications: data.applications,
- auth: {
- ...state.auth,
- },
- };
-}
-
-function mapDispatchToActions(dispatch) {
- const a = actions.recruit;
- return {
- getJobs: (ownProps) => {
- dispatch(a.getJobsInit(ownProps));
- dispatch(a.getJobsDone(ownProps));
- },
- getJobApplications: (tokenV3) => {
- dispatch(a.getJobApplicationsInit());
- dispatch(a.getJobApplicationsDone(tokenV3));
- },
- };
-}
-
-export default connect(
- mapStateToProps,
- mapDispatchToActions,
-)(withOptimizely(RecruitCRMJobsContainer));
diff --git a/src/shared/containers/Gigs/_RecruitCRMJobs_ab-v1.jsx b/src/shared/containers/Gigs/_RecruitCRMJobs_ab-v1.jsx
deleted file mode 100644
index 9c5f9bfa7c..0000000000
--- a/src/shared/containers/Gigs/_RecruitCRMJobs_ab-v1.jsx
+++ /dev/null
@@ -1,329 +0,0 @@
-/**
- * A block that fetches and renders a job listing page
- * driven by recruitCRM
- */
-import _ from 'lodash';
-import actions from 'actions/recruitCRM';
-import LoadingIndicator from 'components/LoadingIndicator';
-import SearchCombo from 'components/GUIKit/SearchCombo';
-import Paginate from 'components/GUIKit/Paginate';
-import JobListCard from 'components/GUIKit/JobListCard';
-import Dropdown from 'components/GUIKit/Dropdown';
-import PT from 'prop-types';
-import React from 'react';
-import { connect } from 'react-redux';
-import { getSalaryType, getCustomField } from 'utils/gigs';
-import IconBlackLocation from 'assets/images/icon-black-location.svg';
-import { config, Link, isomorphy } from 'topcoder-react-utils';
-import { getQuery, updateQuery } from 'utils/url';
-import { withOptimizely } from '@optimizely/react-sdk';
-import './jobLisingStyles.scss';
-
-const cookies = require('browser-cookies');
-
-const CONTENT_PREVIEW_LENGTH = 175;
-const GIGS_PER_PAGE = 10;
-// Sort by dropdown
-const sortByOptions = [
- { label: 'Latest Added Descending', selected: true },
- { label: 'Latest Updated Descending', selected: false },
-];
-// Locations
-let locations = [{
- label: 'All', selected: true,
-}];
-
-class RecruitCRMJobsContainer extends React.Component {
- constructor(props) {
- super(props);
- // Filter initial state
- this.state = {
- term: '',
- page: 0,
- sortBy: 'created_on',
- location: 'All',
- };
- // binds
- this.onSearch = this.onSearch.bind(this);
- this.onPaginate = this.onPaginate.bind(this);
- this.onFilter = this.onFilter.bind(this);
- this.onLocation = this.onLocation.bind(this);
- this.onSort = this.onSort.bind(this);
- this.onHotlistClick = this.onHotlistClick.bind(this);
- }
-
- componentDidMount() {
- const {
- getJobs,
- jobs,
- } = this.props;
- const { state } = this;
- const q = getQuery();
- // This gets all jobs.
- // Pagination and filtering on front-side
- if (!jobs.length) {
- getJobs({
- job_status: 1, // Open jobs only
- });
- }
- // handle URL query if present
- if (q && q.search) {
- const stateUpdate = {
- ...state,
- term: q.search,
- };
- this.setState(stateUpdate);
- }
- }
-
- /**
- * Wraps all calls to setState
- * @param {Object} newState the state update
- */
- onFilter(newState) {
- // Do updates
- // update the state
- this.setState(newState);
- }
-
- onSearch(newTerm) {
- this.onFilter({
- term: newTerm,
- page: 0,
- });
- // update the URL query
- updateQuery({
- search: newTerm,
- });
- }
-
- onPaginate(newPage) {
- this.onFilter({
- page: newPage.selected,
- });
- window.scrollTo({
- top: 0,
- behavior: 'smooth',
- });
- }
-
- onLocation(newLocation) {
- const selected = _.find(newLocation, { selected: true });
- this.onFilter({
- location: selected.label,
- page: 0,
- });
- }
-
- onSort(newSort) {
- const selected = _.find(newSort, { selected: true });
- this.onFilter({
- sortBy: selected.label === 'Latest Updated Descending' ? 'updated_on' : 'created_on',
- page: 0,
- });
- }
-
- onHotlistClick(job) {
- const { optimizely } = this.props;
- optimizely.track('Hotlist ads click');
- cookies.set('_tc.hcl', JSON.stringify({
- slug: job.slug,
- }), {
- expires: 0,
- });
- }
-
- render() {
- const {
- loading,
- jobs,
- optimizely,
- } = this.props;
- const {
- term,
- page,
- sortBy,
- location,
- } = this.state;
-
- if (loading) {
- return (
-
- ;
- Searching our database for the best gigs…
-
- );
- }
-
- // optimizely decide
- let decision = { enabled: true };
- if (isomorphy.isClientSide()) {
- // decision = optimizely.decide('gig_listing_hotlist');
- decision = optimizely.decide('gig_listing_hotlist_center');
- }
- let jobsToDisplay = jobs;
- // build hotlist of jobs if present
- let hotlistJobs = _.filter(jobs, (job) => {
- const showInHotlist = _.find(job.custom_fields, ['field_name', 'Show in Hotlist']);
- return showInHotlist && showInHotlist.value;
- });
- hotlistJobs = hotlistJobs.sort((a, b) => new Date(b.updated_on) - new Date(a.updated_on));
- hotlistJobs = _.slice(hotlistJobs, 0, 4);
- // build current locations dropdown based on all data
- // and filter by selected location
- jobsToDisplay = _.filter(jobs, (job) => {
- const country = job.country === 'Anywhere' || job.country === 'Any' ? 'All' : job.country;
- // build dropdown
- const found = _.findIndex(locations, { label: country });
- if (found === -1) {
- locations.push({
- label: country, selected: location.toLowerCase() === country.toLowerCase(),
- });
- } else {
- locations[found].selected = location.toLowerCase() === country.toLowerCase();
- }
- locations[0].selected = location === 'All';
- // filter
- if (location === 'Anywhere' || location === 'Any' || location === 'All') return true;
- return location.toLowerCase() === job.country.toLowerCase();
- });
- // sort location dropdown
- locations = _.sortBy(locations, ['label']);
- // Filter by term
- if (term) {
- jobsToDisplay = _.filter(jobsToDisplay, (job) => {
- // eslint-disable-next-line no-underscore-dangle
- const _term = term.toLowerCase();
- // name search
- if (job.name.toLowerCase().includes(_term)) return true;
- // skills search
- const skills = _.find(job.custom_fields, ['field_name', 'Technologies Required']);
- if (skills && skills.value && skills.value.toLowerCase().includes(_term)) return true;
- // location
- if (job.country.toLowerCase().includes(_term)) return true;
- // duration
- const duration = _.find(job.custom_fields, ['field_name', 'Duration']);
- if (duration && duration.value && duration.value.toLowerCase().includes(_term)) return true;
- // no match
- return false;
- });
- }
- // Sort controlled by sortBy state
- jobsToDisplay = jobsToDisplay.sort((a, b) => {
- // sort featured gigs first no matter the sortBy
- const featuredA = getCustomField(a.custom_fields, 'Featured');
- const featuredB = getCustomField(b.custom_fields, 'Featured');
- if (featuredB !== 'n/a' && featuredA === 'n/a') return Number.MAX_VALUE;
- if (featuredB === 'n/a' && featuredA !== 'n/a') return -Number.MIN_VALUE;
- return new Date(b[sortBy]) - new Date(a[sortBy]);
- });
- // Calc pages
- const pages = Math.ceil(jobsToDisplay.length / GIGS_PER_PAGE);
- // Paginate the results
- jobsToDisplay = _.slice(
- jobsToDisplay,
- page * GIGS_PER_PAGE, (page * GIGS_PER_PAGE) + GIGS_PER_PAGE,
- );
-
- return (
-
-
-
-
-
-
-
-
- {
- jobsToDisplay.length
- ? jobsToDisplay.map(job => )
- : No Results
- }
-
- {
- jobsToDisplay.length
- ?
: null
- }
-
- {
- hotlistJobs.length && decision.enabled && (
-
-
HOT THIS WEEK
-
- {
- hotlistJobs.map((hjob, indx) => (indx <= 1 ? (
-
this.onHotlistClick(hjob)}>
-
{hjob.country}
-
{hjob.name}
-
${hjob.min_annual_salary} - {hjob.max_annual_salary} / {getSalaryType(hjob.salary_type)}
- {
- getCustomField(hjob.custom_fields, 'Hotlist excerpt') !== 'n/a' ? (
-
- {
- `${getCustomField(hjob.custom_fields, 'Hotlist excerpt').substring(0, CONTENT_PREVIEW_LENGTH)}${getCustomField(hjob.custom_fields, 'Hotlist excerpt').length > CONTENT_PREVIEW_LENGTH ? '...' : ''}`
- }
-
- ) : null
- }
-
- ) : (
-
-
{hjob.country}
-
{hjob.name}
-
${hjob.min_annual_salary} - {hjob.max_annual_salary} / {getSalaryType(hjob.salary_type)}
- {
- getCustomField(hjob.custom_fields, 'Hotlist excerpt') !== 'n/a' ? (
-
- {
- `${getCustomField(hjob.custom_fields, 'Hotlist excerpt').substring(0, CONTENT_PREVIEW_LENGTH)}${getCustomField(hjob.custom_fields, 'Hotlist excerpt').length > CONTENT_PREVIEW_LENGTH ? '...' : ''}`
- }
-
- ) : null
- }
-
this.onHotlistClick(hjob)}>Apply Now
-
- )))
- }
-
-
- )
- }
-
- );
- }
-}
-
-RecruitCRMJobsContainer.defaultProps = {
- jobs: [],
- loading: true,
-};
-
-RecruitCRMJobsContainer.propTypes = {
- getJobs: PT.func.isRequired,
- loading: PT.bool,
- jobs: PT.arrayOf(PT.shape),
- optimizely: PT.shape().isRequired,
-};
-
-function mapStateToProps(state) {
- const data = state.recruitCRM;
- return {
- jobs: data ? data.jobs : [],
- loading: data ? data.loading : true,
- };
-}
-
-function mapDispatchToActions(dispatch) {
- const a = actions.recruit;
- return {
- getJobs: (ownProps) => {
- dispatch(a.getJobsInit(ownProps));
- dispatch(a.getJobsDone(ownProps));
- },
- };
-}
-
-export default connect(
- mapStateToProps,
- mapDispatchToActions,
-)(withOptimizely(RecruitCRMJobsContainer));
diff --git a/src/shared/containers/Gigs/_jobLisingStyles_ab-v1.scss b/src/shared/containers/Gigs/_jobLisingStyles_ab-v1.scss
deleted file mode 100644
index 535a92cb16..0000000000
--- a/src/shared/containers/Gigs/_jobLisingStyles_ab-v1.scss
+++ /dev/null
@@ -1,215 +0,0 @@
-/* stylelint-disable no-descending-specificity */
-@import "~styles/mixins";
-
-.loading-text {
- font-family: Roboto, sans-serif;
- font-size: 24px;
- line-height: 26px;
- color: #2a2a2a;
- text-align: center;
-}
-
-.container,
-.container-with-hotlist {
- max-width: $screen-lg;
- margin: auto;
-
- @media (max-width: 1280px) {
- padding: 0 15px;
- }
-
- .gigs {
- display: block;
- }
-
- .filters {
- display: flex;
- align-items: flex-end;
-
- @include xs-to-sm {
- flex-direction: column;
- }
-
- > div {
- margin-right: 30px;
- flex: 1;
-
- @include xs-to-sm {
- margin-right: 0;
- margin-bottom: 15px;
- }
-
- &:first-child {
- flex: 3;
- }
-
- &:last-child {
- margin-right: 0;
- }
- }
- }
-
- .jobs-list-container {
- display: flex;
- flex-direction: column;
- margin: 20px 0 50px 0;
-
- .no-results {
- display: flex;
- justify-content: center;
- }
- }
-}
-
-.container-with-hotlist {
- display: flex;
-
- .gigs {
- width: 956px;
-
- @media (max-width: 1280px) {
- max-width: none;
- flex: 1;
- }
- }
-
- .filters {
- > div {
- margin-right: 20px;
-
- @include xs-to-sm {
- margin-right: 0;
- }
-
- &:nth-child(2) {
- min-width: 194px;
- }
-
- &:last-child {
- flex: 2;
- max-width: 223px;
-
- @include xs-to-sm {
- max-width: none;
- }
- }
- }
- }
-
- .hotlist {
- display: flex;
- flex-direction: column;
- margin-left: 28px;
- flex: 1;
-
- @media (max-width: 1280px) {
- display: none;
- }
-
- h5 {
- font-family: Barlow, sans-serif;
- font-size: 20px;
- line-height: 24px;
- text-transform: uppercase;
- font-weight: 600;
- margin: 7px 0 31px 6px;
- color: #2a2a2a;
- }
-
- .hotlist-items {
- .hotlist-item-1,
- .hotlist-item-2,
- .hotlist-item-3,
- .hotlist-item-4 {
- display: flex;
- flex-direction: column;
- border-radius: 10px;
- padding: 20px 20px 12px;
- font-family: Roboto, sans-serif;
- margin-bottom: 16px;
- color: #2a2a2a;
-
- .location {
- font-size: 14px;
- display: flex;
- align-items: center;
-
- svg {
- margin-right: 5px;
- width: 15px;
- height: 17px;
- }
- }
-
- .job-title {
- margin: 0;
- }
-
- .job-money {
- line-height: 30px;
- }
-
- .job-desc {
- font-family: Roboto, sans-serif;
- line-height: 24px;
- margin-top: 13px;
- }
- }
-
- .hotlist-item-1,
- .hotlist-item-2,
- .hotlist-item-4 {
- color: #fff;
-
- .location svg g {
- stroke: #fff;
- }
-
- .job-title,
- .job-desc {
- color: #fff;
- }
- }
-
- .hotlist-item-1 {
- background-image: linear-gradient(305.22deg, #9d41c9 0.01%, #ef476f 100%);
- }
-
- .hotlist-item-2 {
- background-image: linear-gradient(140.77deg, #9d41c9 0%, #50ade8 100%);
- }
-
- .hotlist-item-3 {
- background-image: linear-gradient(133.83deg, #f4f4f4 0%, #d4d4d4 100%);
- }
-
- .hotlist-item-4 {
- background-image: linear-gradient(359.14deg, #555 0%, #2a2a2a 100%);
- }
-
- .hotlist-item-button-3,
- .hotlist-item-button-4 {
- font-family: Roboto, sans-serif;
- font-size: 12px;
- letter-spacing: 0.8px;
- line-height: 30px;
- padding: 0 15px;
- text-transform: uppercase;
- font-weight: bold;
- margin: 22px 0 9px;
- max-width: 104px;
- border-radius: 15px;
- }
-
- .hotlist-item-button-3 {
- background-color: #137d60;
- color: #fff;
- }
-
- .hotlist-item-button-4 {
- background-color: #fff;
- color: #229174;
- }
- }
- }
-}
diff --git a/src/shared/containers/Gigs/jobLisingStyles.scss b/src/shared/containers/Gigs/jobLisingStyles.scss
deleted file mode 100644
index 3c294a2fd5..0000000000
--- a/src/shared/containers/Gigs/jobLisingStyles.scss
+++ /dev/null
@@ -1,194 +0,0 @@
-/* stylelint-disable no-descending-specificity */
-@import "~styles/mixins";
-
-.loading-text {
- font-family: Roboto, sans-serif;
- font-size: 24px;
- line-height: 26px;
- color: #2a2a2a;
- text-align: center;
-}
-
-.container,
-.container-with-hotlist {
- max-width: $screen-lg;
- margin: auto;
-
- @media (max-width: 1280px) {
- padding: 0 15px;
- }
-
- .gigs {
- display: block;
- flex: 1;
- }
-
- .filters {
- display: flex;
- align-items: flex-end;
-
- @include xs-to-sm {
- flex-direction: column;
- }
-
- > div {
- margin-right: 30px;
- flex: 1;
-
- @include xs-to-sm {
- margin-right: 0;
- margin-bottom: 15px;
- }
-
- &:first-child {
- flex: 3;
- }
-
- &:last-child {
- margin-right: 0;
- }
- }
- }
-
- .jobs-list-container {
- display: flex;
- flex-direction: column;
- margin: 20px 0 50px 0;
-
- .no-results {
- display: flex;
- justify-content: center;
- }
- }
-}
-
-.container-with-hotlist {
- display: flex;
-
- .hotlist {
- display: flex;
- flex: 1;
- margin: 5px 0;
-
- h5 {
- font-family: Barlow, sans-serif;
- font-size: 20px;
- line-height: 24px;
- text-transform: uppercase;
- font-weight: 600;
- margin: 7px 0 31px 6px;
- color: #2a2a2a;
- }
-
- .hotlist-items {
- display: grid;
- align-items: stretch;
- gap: 0 20px;
- width: 100%;
- grid-template-columns: 1fr 1fr 1fr 1fr;
-
- @include md-to-lg {
- grid-template-columns: 1fr 1fr;
- }
-
- @include xs-to-sm {
- grid-template-columns: 1fr;
- }
-
- .hotlist-item-1,
- .hotlist-item-2,
- .hotlist-item-3,
- .hotlist-item-4 {
- display: flex;
- flex-direction: column;
- border-radius: 10px;
- padding: 20px 20px 12px;
- font-family: Roboto, sans-serif;
- margin-bottom: 16px;
- color: #2a2a2a;
-
- .location {
- font-size: 14px;
- display: flex;
- align-items: center;
- line-height: 30px;
-
- svg {
- margin-right: 5px;
- width: 15px;
- height: 17px;
- }
- }
-
- .job-title {
- margin: 0;
- }
-
- .job-money {
- line-height: 30px;
- }
-
- .job-desc {
- font-family: Roboto, sans-serif;
- line-height: 24px;
- margin-top: 13px;
- }
- }
-
- .hotlist-item-1,
- .hotlist-item-2,
- .hotlist-item-4 {
- color: #fff;
-
- .location svg g {
- stroke: #fff;
- }
-
- .job-title,
- .job-desc {
- color: #fff;
- }
- }
-
- .hotlist-item-1 {
- background-image: linear-gradient(305.22deg, #9d41c9 0.01%, #ef476f 100%);
- }
-
- .hotlist-item-2 {
- background-image: linear-gradient(125.57deg, #2c95d7 0%, #83c5ee 100%);
- }
-
- .hotlist-item-3 {
- background-image: linear-gradient(309.43deg, #f4f4f4 0%, #d4d4d4 100%);
- }
-
- .hotlist-item-4 {
- background-image: linear-gradient(359.14deg, #555 0%, #2a2a2a 100%);
- }
-
- .hotlist-item-button-3,
- .hotlist-item-button-4 {
- font-family: Roboto, sans-serif;
- font-size: 12px;
- letter-spacing: 0.8px;
- line-height: 30px;
- padding: 0 15px;
- text-transform: uppercase;
- font-weight: bold;
- margin: 22px 0 9px;
- max-width: 104px;
- border-radius: 15px;
- }
-
- .hotlist-item-button-3 {
- background-color: #137d60;
- color: #fff;
- }
-
- .hotlist-item-button-4 {
- background-color: #fff;
- color: #229174;
- }
- }
- }
-}
diff --git a/src/shared/containers/GigsPages/index.jsx b/src/shared/containers/GigsPages/index.jsx
deleted file mode 100644
index 5e5bd0431c..0000000000
--- a/src/shared/containers/GigsPages/index.jsx
+++ /dev/null
@@ -1,143 +0,0 @@
-/**
- * Connects the Redux store to the GigsPages component.
- */
-import React from 'react';
-import PT from 'prop-types';
-import Header from 'containers/TopcoderHeader';
-import Footer from 'components/TopcoderFooter';
-import Viewport from 'components/Contentful/Viewport';
-import { config, isomorphy } from 'topcoder-react-utils';
-import RecruitCRMJobDetails from 'containers/Gigs/RecruitCRMJobDetails';
-import { Helmet } from 'react-helmet';
-import MetaTags from 'components/MetaTags';
-import { OptimizelyProvider, createInstance } from '@optimizely/react-sdk';
-import { connect } from 'react-redux';
-import _ from 'lodash';
-import { v4 as uuidv4 } from 'uuid';
-import ChallengeTab from 'components/challenge-listing/ChallengeTab';
-
-import './style.scss';
-
-const optimizelyClient = createInstance({
- sdkKey: config.OPTIMIZELY.SDK_KEY,
-});
-const cookies = require('browser-cookies');
-
-const GIGS_SOCIAL_SHARE_IMAGE = 'https://images.ctfassets.net/b5f1djy59z3a/4XlYNZgq5Kfa4XdwQ6pDfV/769ea7be756a88145b88ce685f050ebc/10_Freelance_Gig.png';
-
-function GigsPagesContainer(props) {
- const {
- match,
- profile,
- history,
- location,
- } = props;
- const optProfile = {
- attributes: {},
- };
- if (!_.isEmpty(profile)) {
- optProfile.id = String(profile.userId);
- optProfile.attributes.TC_Handle = profile.handle;
- optProfile.attributes.HomeCountryCode = profile.homeCountryCode;
- optProfile.attributes.email = profile.email;
- } else if (isomorphy.isClientSide()) {
- const idCookie = cookies.get('_tc.aid');
- if (idCookie) {
- optProfile.id = JSON.parse(idCookie).aid;
- } else {
- optProfile.id = uuidv4();
- cookies.set('_tc.aid', JSON.stringify({
- aid: optProfile.id,
- }), {
- secure: true,
- domain: '',
- expires: 365, // days
- });
- }
- }
- const { id, type } = match.params;
- const isApply = `${config.GIGS_PAGES_PATH}/${id}/apply` === match.url;
- const title = 'Find Freelance Work | Gigs | Topcoder';
- const description = 'Compete and build up your profiles and skills! Topcoder members become eligible to work on Gig Work projects by first proving themselves in various skill sets through Topcoder competitions.';
- const inner = (
-
-
-
-
-
-
-
-
-
- {
- id ? (
-
- ) : null
- }
- {
- !id && !type ? (
-
-
-
- ) : null
- }
-
-
- );
-
- return (
-
- {inner}
-
- );
-}
-
-GigsPagesContainer.defaultProps = {
- profile: null,
-};
-
-GigsPagesContainer.propTypes = {
- location: PT.shape({
- search: PT.string,
- pathname: PT.string,
- }).isRequired,
- history: PT.shape().isRequired,
- match: PT.shape().isRequired,
- profile: PT.shape(),
-};
-
-function mapStateToProps(state) {
- const profile = state.auth && state.auth.profile ? { ...state.auth.profile } : {};
- return {
- profile,
- };
-}
-
-export default connect(
- mapStateToProps,
-)(GigsPagesContainer);
diff --git a/src/shared/containers/GigsPages/style.scss b/src/shared/containers/GigsPages/style.scss
deleted file mode 100644
index a2a0b1bf75..0000000000
--- a/src/shared/containers/GigsPages/style.scss
+++ /dev/null
@@ -1,6 +0,0 @@
-@import "~styles/mixins";
-
-.ChallengeFiltersExample {
- margin: 0 auto;
- max-width: $screen-lg;
-}
diff --git a/src/shared/containers/engagement-listing/index.jsx b/src/shared/containers/engagement-listing/index.jsx
new file mode 100644
index 0000000000..e2bc2bc306
--- /dev/null
+++ b/src/shared/containers/engagement-listing/index.jsx
@@ -0,0 +1,184 @@
+import _ from 'lodash';
+import actions from 'actions/engagements';
+import headerActions from 'actions/topcoder_header';
+import React from 'react';
+import PT from 'prop-types';
+import shortId from 'shortid';
+import { connect } from 'react-redux';
+import EngagementListing from 'components/engagement-listing';
+import MetaTags from 'components/MetaTags';
+
+import ogImage from '../../../assets/images/social.png';
+
+class EngagementListingContainer extends React.Component {
+ componentDidMount() {
+ const {
+ auth,
+ filter,
+ getEngagements,
+ markHeaderMenu,
+ } = this.props;
+
+ markHeaderMenu();
+ getEngagements(0, filter, auth.tokenV3);
+ }
+
+ componentDidUpdate(prevProps) {
+ const {
+ auth,
+ dropEngagements,
+ filter,
+ getEngagements,
+ } = this.props;
+
+ const filterChanged = !_.isEqual(prevProps.filter, filter);
+ const tokenChanged = prevProps.auth.tokenV3 !== auth.tokenV3;
+
+ if (filterChanged || tokenChanged) {
+ dropEngagements();
+ getEngagements(0, filter, auth.tokenV3);
+ }
+ }
+
+ componentWillUnmount() {
+ const { dropEngagements } = this.props;
+ dropEngagements();
+ }
+
+ loadMore = () => {
+ const {
+ allEngagementsLoaded,
+ auth,
+ filter,
+ getEngagements,
+ lastRequestedPage,
+ loadingEngagementsUUID,
+ } = this.props;
+
+ if (loadingEngagementsUUID || allEngagementsLoaded) return;
+
+ const nextPage = lastRequestedPage + 1;
+ getEngagements(nextPage, filter, auth.tokenV3);
+ };
+
+ render() {
+ const {
+ engagements,
+ filter,
+ auth,
+ history,
+ location,
+ loadingEngagementsUUID,
+ setFilter,
+ allEngagementsLoaded,
+ } = this.props;
+
+ return (
+
+
+
+
+ );
+ }
+}
+
+EngagementListingContainer.defaultProps = {
+ engagements: [],
+ loadingEngagementsUUID: '',
+ lastRequestedPage: -1,
+ allEngagementsLoaded: false,
+ meta: {
+ totalCount: 0,
+ },
+};
+
+EngagementListingContainer.propTypes = {
+ auth: PT.shape({
+ tokenV3: PT.string,
+ }).isRequired,
+ engagements: PT.arrayOf(PT.shape()),
+ loadingEngagementsUUID: PT.string,
+ lastRequestedPage: PT.number,
+ allEngagementsLoaded: PT.bool,
+ meta: PT.shape({
+ totalCount: PT.number,
+ }),
+ filter: PT.shape({
+ status: PT.string,
+ skills: PT.arrayOf(PT.string),
+ location: PT.string,
+ search: PT.string,
+ sortBy: PT.string,
+ }).isRequired,
+ getEngagements: PT.func.isRequired,
+ dropEngagements: PT.func.isRequired,
+ setFilter: PT.func.isRequired,
+ markHeaderMenu: PT.func.isRequired,
+ history: PT.shape({
+ push: PT.func,
+ }).isRequired,
+ location: PT.shape({
+ pathname: PT.string,
+ search: PT.string,
+ }).isRequired,
+};
+
+const mapStateToProps = (state) => {
+ const engagementsState = state.engagements || {};
+
+ return {
+ engagements: engagementsState.engagements || [],
+ loadingEngagementsUUID: engagementsState.loadingEngagementsUUID || '',
+ lastRequestedPage: Number.isFinite(engagementsState.lastRequestedPage)
+ ? engagementsState.lastRequestedPage
+ : -1,
+ allEngagementsLoaded: engagementsState.allEngagementsLoaded || false,
+ filter: engagementsState.filter || {
+ status: 'open',
+ skills: [],
+ location: '',
+ search: '',
+ sortBy: 'createdAt',
+ },
+ meta: engagementsState.meta || {
+ totalCount: 0,
+ },
+ auth: state.auth,
+ };
+};
+
+const mapDispatchToProps = (dispatch) => {
+ const a = actions.engagements;
+ const ah = headerActions.topcoderHeader;
+
+ return {
+ getEngagements: (page, filters, tokenV3) => {
+ const uuid = shortId();
+ dispatch(a.getEngagementsInit(uuid, page, filters));
+ dispatch(a.getEngagementsDone(uuid, page, filters, tokenV3));
+ },
+ dropEngagements: () => dispatch(a.dropEngagements()),
+ setFilter: filter => dispatch(a.setFilter(filter)),
+ markHeaderMenu: () => dispatch(ah.setCurrentNav('Compete', 'Engagements')),
+ };
+};
+
+export default connect(
+ mapStateToProps,
+ mapDispatchToProps,
+)(EngagementListingContainer);
diff --git a/src/shared/reducers/engagements.js b/src/shared/reducers/engagements.js
new file mode 100644
index 0000000000..ee443ad19d
--- /dev/null
+++ b/src/shared/reducers/engagements.js
@@ -0,0 +1,99 @@
+import { handleActions } from 'redux-actions';
+import actions from 'actions/engagements';
+
+const initialState = {
+ engagements: [],
+ loadingEngagementsUUID: '',
+ lastRequestedPage: -1,
+ allEngagementsLoaded: false,
+ filter: {
+ status: 'open',
+ skills: [],
+ location: '',
+ search: '',
+ sortBy: 'createdAt',
+ },
+ meta: {
+ totalCount: 0,
+ },
+};
+
+function onGetEngagementsInit(state, { payload }) {
+ return {
+ ...state,
+ loadingEngagementsUUID: payload.uuid,
+ lastRequestedPage: payload.page,
+ allEngagementsLoaded: payload.page === 0 ? false : state.allEngagementsLoaded,
+ };
+}
+
+function onGetEngagementsDone(state, { error, payload }) {
+ if (!payload || payload.uuid !== state.loadingEngagementsUUID) return state;
+
+ if (error) {
+ return {
+ ...state,
+ loadingEngagementsUUID: '',
+ };
+ }
+
+ const page = typeof payload.page === 'number' ? payload.page : state.lastRequestedPage;
+ const engagements = payload.engagements || [];
+ const nextEngagements = page > 0
+ ? state.engagements.concat(engagements)
+ : engagements;
+ const nextMeta = {
+ ...state.meta,
+ ...(payload.meta || {}),
+ };
+ const totalCount = typeof nextMeta.totalCount === 'number' ? nextMeta.totalCount : null;
+ const allEngagementsLoaded = totalCount !== null
+ ? nextEngagements.length >= totalCount
+ : engagements.length === 0;
+
+ return {
+ ...state,
+ engagements: nextEngagements,
+ loadingEngagementsUUID: '',
+ allEngagementsLoaded,
+ meta: nextMeta,
+ };
+}
+
+function onDropEngagements(state) {
+ return {
+ ...state,
+ engagements: [],
+ loadingEngagementsUUID: '',
+ lastRequestedPage: -1,
+ allEngagementsLoaded: false,
+ meta: {
+ totalCount: 0,
+ },
+ };
+}
+
+function onSetFilter(state, { payload }) {
+ return {
+ ...state,
+ filter: {
+ ...state.filter,
+ ...payload,
+ },
+ };
+}
+
+function create(initial) {
+ return handleActions({
+ [actions.engagements.getEngagementsInit]: onGetEngagementsInit,
+ [actions.engagements.getEngagementsDone]: onGetEngagementsDone,
+ [actions.engagements.dropEngagements]: onDropEngagements,
+ [actions.engagements.setFilter]: onSetFilter,
+ }, initial || initialState);
+}
+
+export function factory() {
+ return Promise.resolve(create());
+}
+
+export default create();
diff --git a/src/shared/reducers/index.js b/src/shared/reducers/index.js
index 34f4da0a55..1900c157fa 100644
--- a/src/shared/reducers/index.js
+++ b/src/shared/reducers/index.js
@@ -38,13 +38,13 @@ import { factory as termsFactory } from './terms';
import { factory as mfaFactory } from './mfa';
import mmLeaderboard from './mmLeaderboard';
import tcoLeaderboards from './tco/leaderboards';
-import recruitCRM from './recruitCRM';
import gSheet from './gSheet';
import timelineWall from './timelineWall';
import thrive from './contentful/thrive';
import dashboard from './dashboard';
import blog from './blog';
import identity from './identity';
+import engagements from './engagements';
/**
* Given HTTP request, generates options for SSR by topcoder-react-lib's reducer
@@ -173,7 +173,6 @@ export function factory(req) {
menuNavigation,
challengesBlock,
policyPages,
- recruitCRM,
mmLeaderboard,
gSheet,
thrive,
@@ -182,6 +181,7 @@ export function factory(req) {
blog,
timelineWall,
identity,
+ engagements,
}));
}
diff --git a/src/shared/reducers/recruitCRM.js b/src/shared/reducers/recruitCRM.js
deleted file mode 100644
index 4ed3a878e3..0000000000
--- a/src/shared/reducers/recruitCRM.js
+++ /dev/null
@@ -1,178 +0,0 @@
-/**
- * Reducer for state.recruit
- */
-import _ from 'lodash';
-import actions from 'actions/recruitCRM';
-import { handleActions } from 'redux-actions';
-
-/**
- * Handles recruit.getJobsInit action.
- * @param {Object} state Previous state.
- */
-function onInit(state) {
- return {
- ...state,
- jobs: {},
- loading: true,
- };
-}
-
-/**
- * Handles recruit.getJobsDone action.
- * @param {Object} state Previous state.
- * @param {Object} action The action.
- */
-function onDone(state, { payload }) {
- return {
- ...state,
- loading: false,
- jobs: payload.data,
- };
-}
-
-/**
- * Handles recruit.getJobInit action.
- * @param {Object} state Previous state.
- */
-function onJobInit(state, { payload }) {
- return {
- ...state,
- [payload.id]: {
- loading: true,
- },
- };
-}
-
-/**
- * Handles recruit.getJobDone action.
- * @param {Object} state Previous state.
- * @param {Object} action The action.
- */
-function onJobDone(state, { payload }) {
- return {
- ...state,
- [payload.id]: {
- loading: false,
- job: payload.data,
- },
- };
-}
-
-/**
- * Handles recruit.applyForJobInit action.
- * @param {Object} state Previous state.
- */
-function onApplyForJobInit(state, { payload }) {
- const r = {
- ...state,
- };
- r[payload.id].applying = true;
- return r;
-}
-
-/**
- * Handles recruit.applyForJobDone action.
- * @param {Object} state Previous state.
- * @param {Object} action The action.
- */
-function onApplyForJobDone(state, action) {
- const r = {
- ...state,
- };
- if (!action.error) {
- r[action.payload.id].applying = false;
- r[action.payload.id].application = action.payload.data;
- }
- return r;
-}
-
-/**
- * Handles recruit.applyForJobInit action.
- * @param {Object} state Previous state.
- */
-function onSearchCandidatesInit(state, { payload }) {
- const r = {
- ...state,
- };
- r[payload.email] = {};
- return r;
-}
-
-/**
- * Handles recruit.applyForJobDone action.
- * @param {Object} state Previous state.
- * @param {Object} action The action.
- */
-function onSearchCandidatesDone(state, { payload }) {
- const r = {
- ...state,
- };
- const profile = _.isArray(payload.data) ? {} : payload.data.data[0];
- r[payload.email].profile = profile;
- return r;
-}
-
-function onGetJobApplicationsInit(state) {
- return {
- ...state,
- applications: 0,
- };
-}
-
-function onGetJobApplicationsDone(state, { payload }) {
- return {
- ...state,
- applications: payload.data,
- };
-}
-
-/**
- * Handles recruit.getGigsInit action.
- * @param {Object} state Previous state.
- */
-function onGigsInit(state) {
- return {
- ...state,
- gigs: [],
- gigsLoading: true,
- };
-}
-
-/**
- * Handles recruit.getGigsDone action.
- * @param {Object} state Previous state.
- * @param {Object} action The action.
- */
-function onGigsDone(state, { payload }) {
- return {
- ...state,
- gigsLoading: false,
- gigs: payload.data,
- };
-}
-
-/**
- * Creates recruitCRM reducer with the specified initial state.
- * @param {Object} state Optional. If not given, the default one is
- * generated automatically.
- * @return {Function} Reducer.
- */
-function create(state = {}) {
- return handleActions({
- [actions.recruit.getJobsInit]: onInit,
- [actions.recruit.getJobsDone]: onDone,
- [actions.recruit.getJobInit]: onJobInit,
- [actions.recruit.getJobDone]: onJobDone,
- [actions.recruit.applyForJobInit]: onApplyForJobInit,
- [actions.recruit.applyForJobDone]: onApplyForJobDone,
- [actions.recruit.searchCandidatesInit]: onSearchCandidatesInit,
- [actions.recruit.searchCandidatesDone]: onSearchCandidatesDone,
- [actions.recruit.getJobApplicationsInit]: onGetJobApplicationsInit,
- [actions.recruit.getJobApplicationsDone]: onGetJobApplicationsDone,
- [actions.recruit.getGigsInit]: onGigsInit,
- [actions.recruit.getGigsDone]: onGigsDone,
- }, state);
-}
-
-/* Reducer with the default initial state. */
-export default create();
diff --git a/src/shared/routes/Examples/Examples.jsx b/src/shared/routes/Examples/Examples.jsx
index 1e1bf55d4a..6b58a245a1 100644
--- a/src/shared/routes/Examples/Examples.jsx
+++ b/src/shared/routes/Examples/Examples.jsx
@@ -33,7 +33,6 @@ import SearchPageFilterExample from 'components/examples/SearchPageFilter';
import BlogFeedExample from 'components/examples/BlogFeed';
import GUIKit from 'components/examples/GUIKit';
import ThriveArticlesFeedExample from 'components/examples/ThriveArticlesFeed';
-import GigsFeedExample from 'components/examples/GigsFeed';
import ChallengesFeed from 'components/examples/ChallengesFeed';
import MemberPathSelectorExample from 'components/examples/MemberPathSelector';
@@ -102,7 +101,6 @@ export default function Examples({
-
diff --git a/src/shared/routes/GigsPages.jsx b/src/shared/routes/GigsPages.jsx
deleted file mode 100644
index c165fadcc7..0000000000
--- a/src/shared/routes/GigsPages.jsx
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * The loader of Gigs page webpack chunks.
- */
-import path from 'path';
-import React from 'react';
-import LoadingPagePlaceholder from 'components/LoadingPagePlaceholder';
-import { AppChunk, webpack } from 'topcoder-react-utils';
-
-export default function GigsPagesRoute(props) {
- return (
-
import(/* webpackChunkName: "gigsPages/chunk" */ 'containers/GigsPages')
- .then(({ default: GigsPagesContainer }) => (
-
- ))
- }
- renderPlaceholder={() => }
- renderServer={(renderProps) => {
- const p = webpack.resolveWeak('containers/GigsPages');
- const GigsPagesContainer = webpack.requireWeak(path.resolve(__dirname, p));
- return ;
- }}
- />
- );
-}
diff --git a/src/shared/routes/StartPage.jsx b/src/shared/routes/StartPage.jsx
deleted file mode 100644
index dca924c079..0000000000
--- a/src/shared/routes/StartPage.jsx
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * The loader of Gigs page webpack chunks.
- */
-import React from 'react';
-
-import LoadingPagePlaceholder from 'components/LoadingPagePlaceholder';
-import { AppChunk } from 'topcoder-react-utils';
-
-export default function GigsPagesRoute(props) {
- return (
- import(/* webpackChunkName: "gigsPages/chunk" */ 'containers/GigsPages')
- .then(({ default: GigsPagesContainer }) => (
-
- ))
- }
- renderPlaceholder={() => }
- />
- );
-}
diff --git a/src/shared/routes/Topcoder/EngagementListing.jsx b/src/shared/routes/Topcoder/EngagementListing.jsx
new file mode 100644
index 0000000000..6fa30c7498
--- /dev/null
+++ b/src/shared/routes/Topcoder/EngagementListing.jsx
@@ -0,0 +1,32 @@
+import LoadingIndicator from 'components/LoadingIndicator';
+import path from 'path';
+import React from 'react';
+import { StaticRouter } from 'react-router-dom';
+import { AppChunk, webpack } from 'topcoder-react-utils';
+
+export default function EngagementListingRoute() {
+ return (
+ import(/* webpackChunkName: "engagement-listing/chunk" */ 'containers/engagement-listing')
+ .then(({ default: EngagementListing }) => (
+
+ ))
+ }
+ renderPlaceholder={() => }
+ renderServer={(renderProps) => {
+ const p = webpack.resolveWeak('containers/engagement-listing');
+ const EngagementListing = webpack.requireWeak(path.resolve(__dirname, p));
+ return (
+
+
+
+ );
+ }}
+ />
+ );
+}
diff --git a/src/shared/routes/Topcoder/Routes.jsx b/src/shared/routes/Topcoder/Routes.jsx
index 7e040cd60d..18301002b6 100644
--- a/src/shared/routes/Topcoder/Routes.jsx
+++ b/src/shared/routes/Topcoder/Routes.jsx
@@ -27,6 +27,7 @@ import EDUHome from '../EDUHome';
import EDUTracks from '../EDUTracks';
import EDUSearch from '../EDUSearch';
import ChallengeListing from './ChallengeListing';
+import EngagementListing from './EngagementListing';
import Dashboard from './Dashboard';
import Notifications from './Notifications';
import HallOfFame from '../HallOfFame';
@@ -60,6 +61,7 @@ export default function Topcoder() {
path="/challenges/:challengeId([\w]{8}-[\w]{4}-[\w]{4}-[\w]{4}-[\w]{12}|\d{5,8})"
/>
+
}
path="/community/(competitive-programming|data-science|design|development|qa)/how-to-compete"
/>
-
- (
-
-
-
-
-
- )}
- path={`${config.GIGS_PAGES_PATH}/roles`}
- />
-
-
(
diff --git a/src/shared/services/contentful.js b/src/shared/services/contentful.js
index 2f1531253a..1577a73871 100644
--- a/src/shared/services/contentful.js
+++ b/src/shared/services/contentful.js
@@ -25,7 +25,7 @@ if (isomorphy.isServerSide()) {
const EDU_TAXONOMY_ID = '15caxocitaxyK65K9oSd91';
// The keys for subcategory lists/references
// If need to add new track add its fieldID here to be autopickuped
-const EDU_TRACK_KEYS = ['dataScience', 'competitiveProgramming', 'design', 'development', 'qualityAssurance', 'topcoder', 'gigWork'];
+const EDU_TRACK_KEYS = ['dataScience', 'competitiveProgramming', 'design', 'development', 'qualityAssurance', 'topcoder'];
const EDU_ARTICLE_TYPES = ['Article', 'Video', 'Forum post'];
diff --git a/src/shared/services/engagements.js b/src/shared/services/engagements.js
new file mode 100644
index 0000000000..8de9936f07
--- /dev/null
+++ b/src/shared/services/engagements.js
@@ -0,0 +1,266 @@
+import { config } from 'topcoder-react-utils';
+
+const engagementsApiUrl = config.API.ENGAGEMENTS || `${config.API.V6}/engagements/engagements`;
+const skillsApiUrl = `${config.API.V5}/standardized-skills/skills`;
+const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
+const UNKNOWN_SKILL_LABEL = 'Unknown skill';
+
+function isUuid(value) {
+ return typeof value === 'string' && UUID_PATTERN.test(value);
+}
+
+function asArray(value) {
+ if (!value) return [];
+ return Array.isArray(value) ? value : [value];
+}
+
+function buildEngagementsUrl(page, pageSize, filters = {}) {
+ const normalizedPage = Number.isFinite(page) ? Math.max(1, page + 1) : 1;
+ const url = new URL(engagementsApiUrl);
+
+ url.searchParams.append('page', normalizedPage.toString());
+ if (Number.isFinite(pageSize)) {
+ url.searchParams.append('perPage', pageSize.toString());
+ }
+
+ if (filters.status) {
+ const normalizedStatus = String(filters.status).trim().toUpperCase();
+ if (normalizedStatus) {
+ url.searchParams.append('status', normalizedStatus);
+ }
+ }
+
+ const hasSkillFilters = filters.skills && filters.skills.length;
+ if (filters.search && !hasSkillFilters) {
+ url.searchParams.append('search', String(filters.search).trim());
+ }
+
+ if (filters.location) {
+ const countries = String(filters.location)
+ .split(',')
+ .map(entry => entry.trim())
+ .filter(Boolean);
+ if (countries.length) {
+ url.searchParams.append('countries', countries.join(','));
+ }
+ }
+
+ if (filters.skills && filters.skills.length) {
+ const skills = Array.isArray(filters.skills)
+ ? filters.skills
+ : [filters.skills];
+ const normalizedSkills = skills
+ .map(skill => String(skill).trim())
+ .filter(Boolean);
+ if (normalizedSkills.length) {
+ url.searchParams.append('requiredSkills', normalizedSkills.join(','));
+ }
+ }
+
+ if (filters.sortBy === 'createdAt' || filters.sortBy === 'updatedAt') {
+ url.searchParams.append('sortBy', filters.sortBy);
+ url.searchParams.append('sortOrder', 'desc');
+ }
+
+ return url;
+}
+
+function getAuthHeaders(tokenV3) {
+ if (!tokenV3) return undefined;
+ return {
+ Authorization: `Bearer ${tokenV3}`,
+ };
+}
+
+function extractEngagements(data) {
+ if (Array.isArray(data)) return data;
+ if (data && Array.isArray(data.data)) return data.data;
+ if (data && data.result && Array.isArray(data.result.content)) return data.result.content;
+ if (data && data.result && Array.isArray(data.result.data)) return data.result.data;
+ if (data && Array.isArray(data.items)) return data.items;
+ return [];
+}
+
+function extractSkills(data) {
+ if (Array.isArray(data)) return data;
+ if (data && Array.isArray(data.data)) return data.data;
+ if (data && data.result && Array.isArray(data.result.content)) return data.result.content;
+ if (data && data.result && Array.isArray(data.result.data)) return data.result.data;
+ if (data && Array.isArray(data.items)) return data.items;
+ return [];
+}
+
+function extractMeta(data, engagementsCount) {
+ if (!data || Array.isArray(data)) return { totalCount: engagementsCount };
+ if (data.meta) return data.meta;
+ if (data.result && data.result.metadata) return data.result.metadata;
+ if (typeof data.totalCount === 'number') return { totalCount: data.totalCount };
+ if (typeof data.total === 'number') return { totalCount: data.total };
+ if (typeof data.count === 'number') return { totalCount: data.count };
+ return { totalCount: engagementsCount };
+}
+
+async function fetchSkillsByIds(skillIds, tokenV3) {
+ const ids = Array.isArray(skillIds) ? skillIds : [skillIds];
+ const uniqueIds = Array.from(new Set(ids.filter(Boolean)));
+ if (!uniqueIds.length) return [];
+
+ const params = new URLSearchParams();
+ uniqueIds.forEach(skillId => params.append('skillId', skillId));
+ params.set('disablePagination', 'true');
+
+ const headers = getAuthHeaders(tokenV3);
+ const res = await fetch(`${skillsApiUrl}?${params.toString()}`, {
+ method: 'GET',
+ headers,
+ });
+
+ if (!res.ok) {
+ throw new Error(res.statusText);
+ }
+
+ const data = await res.json();
+ return extractSkills(data);
+}
+
+function resolveSkillLabel(skill, skillNameById) {
+ if (!skill) return null;
+
+ if (typeof skill === 'object') {
+ const label = skill.name || skill.title;
+ if (label) return label;
+
+ const skillId = skill.id || skill.value;
+ if (isUuid(skillId)) {
+ return skillNameById.get(skillId) || UNKNOWN_SKILL_LABEL;
+ }
+ return skillId ? String(skillId) : null;
+ }
+
+ if (isUuid(skill)) {
+ return skillNameById.get(skill) || UNKNOWN_SKILL_LABEL;
+ }
+
+ return String(skill);
+}
+
+function normalizeEngagementSkills(engagement, skillNameById) {
+ if (!engagement || typeof engagement !== 'object') return engagement;
+
+ return {
+ ...engagement,
+ skills: asArray(engagement.skills)
+ .map(skill => resolveSkillLabel(skill, skillNameById))
+ .filter(Boolean),
+ requiredSkills: asArray(engagement.requiredSkills)
+ .map(skill => resolveSkillLabel(skill, skillNameById))
+ .filter(Boolean),
+ skillsets: asArray(engagement.skillsets)
+ .map(skill => resolveSkillLabel(skill, skillNameById))
+ .filter(Boolean),
+ };
+}
+
+async function hydrateEngagementSkills(engagements, tokenV3) {
+ if (!Array.isArray(engagements) || !engagements.length) {
+ return engagements;
+ }
+
+ const skillIds = new Set();
+ engagements.forEach((engagement) => {
+ const skillValues = [
+ ...asArray(engagement.skills),
+ ...asArray(engagement.requiredSkills),
+ ...asArray(engagement.skillsets),
+ ];
+ skillValues.forEach((skill) => {
+ if (typeof skill === 'object' && skill !== null) {
+ const skillId = skill.id || skill.value;
+ if (isUuid(skillId)) {
+ skillIds.add(skillId);
+ }
+ } else if (isUuid(skill)) {
+ skillIds.add(skill);
+ }
+ });
+ });
+
+ let skillNameById = new Map();
+ if (skillIds.size) {
+ try {
+ const skills = await fetchSkillsByIds(Array.from(skillIds), tokenV3);
+ skillNameById = new Map(
+ skills
+ .map(skill => [skill.id, skill.name || skill.title || skill.label])
+ .filter(([id, label]) => Boolean(id) && Boolean(label)),
+ );
+ } catch (error) {
+ skillNameById = new Map();
+ }
+ }
+
+ return engagements.map(engagement => normalizeEngagementSkills(engagement, skillNameById));
+}
+
+/**
+ * Fetches engagements.
+ *
+ * @param {number} page - Page number (0-based).
+ * @param {number} pageSize - Number of items per page.
+ * @param {Object} filters - Filters for engagements.
+ * @param {string} tokenV3 - Optional auth token.
+ * @returns {Promise<{engagements: Object[], meta: Object}>} The fetched data.
+ */
+export default async function getEngagements(page, pageSize, filters = {}, tokenV3) {
+ const url = buildEngagementsUrl(page, pageSize, filters);
+ const headers = getAuthHeaders(tokenV3);
+
+ try {
+ const res = await fetch(url.toString(), {
+ method: 'GET',
+ headers,
+ });
+
+ if (!res.ok) {
+ throw new Error(res.statusText);
+ }
+
+ const data = await res.json();
+ const engagements = extractEngagements(data);
+ const meta = extractMeta(data, engagements.length);
+ const hydratedEngagements = await hydrateEngagementSkills(engagements, tokenV3);
+
+ return { engagements: hydratedEngagements, meta };
+ } catch (error) {
+ return Promise.reject(error);
+ }
+}
+
+/**
+ * Fetches a single engagement by ID.
+ *
+ * @param {string} engagementId - The engagement ID.
+ * @param {string} tokenV3 - Optional auth token.
+ * @returns {Promise} The engagement details.
+ */
+export async function getEngagementDetails(engagementId, tokenV3) {
+ const url = new URL(`${engagementsApiUrl}/${encodeURIComponent(engagementId)}`);
+ const headers = getAuthHeaders(tokenV3);
+
+ try {
+ const res = await fetch(url.toString(), {
+ method: 'GET',
+ headers,
+ });
+
+ if (!res.ok) {
+ throw new Error(res.statusText);
+ }
+
+ const data = await res.json();
+ const [hydrated] = await hydrateEngagementSkills([data], tokenV3);
+ return hydrated || data;
+ } catch (error) {
+ return Promise.reject(error);
+ }
+}
diff --git a/src/shared/services/recruitCRM.js b/src/shared/services/recruitCRM.js
deleted file mode 100644
index ff54725a54..0000000000
--- a/src/shared/services/recruitCRM.js
+++ /dev/null
@@ -1,125 +0,0 @@
-import fetch from 'isomorphic-fetch';
-import { logger } from 'topcoder-react-lib';
-import { config } from 'topcoder-react-utils';
-import qs from 'qs';
-import _ from 'lodash';
-
-const PROXY_ENDPOINT = '/api/recruit';
-
-export default class Service {
- baseUrl = PROXY_ENDPOINT;
-
- /**
- * Get jobs by query
- * @param {object} query The request query
- */
- async getJobs(query) {
- const res = await fetch(`${this.baseUrl}/jobs/search?${qs.stringify(query)}`);
- if (!res.ok) {
- const error = new Error('Failed to get jobs');
- logger.error(error, res);
- }
- return res.json();
- }
-
- /**
- * Get job by id
- * @param {*} id The request id
- */
- async getJob(id) {
- const res = await fetch(`${this.baseUrl}/jobs/${id}`);
- if (!res.ok) {
- const error = new Error(`Failed to get job ${id}`);
- logger.error(error, res);
- }
- return res.json();
- }
-
- /**
- * Get all jobs
- * @param {object} query The request query
- */
- async getAllJobs(query) {
- const res = await fetch(`${this.baseUrl}/jobs?${qs.stringify(query)}`);
- if (!res.ok) {
- const error = new Error('Failed to get jobs');
- logger.error(error, res);
- }
- return res.json();
- }
-
- /**
- * get member applications
- * @param {*} tokenV3
- * @returns
- */
- /* eslint-disable class-methods-use-this */
- async getJobApplications(tokenV3) {
- const res = await fetch(
- `${config.PLATFORM_SITE_URL}/gigs-app/api/my-gigs/myJobApplications?page=1&perPage=1`,
- {
- method: 'GET',
- headers: new Headers({
- Authorization: `Bearer ${tokenV3}`,
- }),
- },
- );
- if (!res.ok) {
- const error = new Error('Failed to get job applications');
- logger.error(error, res);
- }
- return parseInt(res.headers.get('x-total'), 10) || 0;
- }
-
- /**
- * applyForJob for candidate
- * @param {string} id The job id to apply to
- * @param {object} payload The apply payload
- * @param {string} tokenV3 User token
- */
- async applyForJob(id, payload, tokenV3) {
- const { resume } = payload;
- const data = new FormData();
- data.append('resume', resume);
- data.append('form', JSON.stringify(_.omit(payload, 'resume')));
- const res = await fetch(`${this.baseUrl}/jobs/${id}/apply`, {
- method: 'POST',
- body: data,
- headers: new Headers({
- Authorization: `Bearer ${tokenV3}`,
- }),
- credentials: 'omit',
- });
- if (!res.ok) {
- const error = new Error('Failed to apply for job');
- logger.error(error, res);
- }
- return res.json();
- }
-
- /**
- * Search for candidate
- * @param {object} email The email to search with
- */
- async searchCandidates(email) {
- const res = await fetch(`${this.baseUrl}/candidates/search?email=${email}`);
- if (!res.ok) {
- const error = new Error('Failed to search for candidates');
- logger.error(error, res);
- }
- return res.json();
- }
-
- /**
- * Get TAAS jobs
- * @param {object} query The request query
- */
- async getTaasJobs(query) {
- const res = await fetch(`${this.baseUrl}/taasjobs?${qs.stringify(query)}`);
- if (!res.ok) {
- const error = new Error('Failed to get taas jobs');
- logger.error(error, res);
- }
- return res.json();
- }
-}
diff --git a/src/shared/utils/gigs.js b/src/shared/utils/gigs.js
deleted file mode 100644
index 3c9ba53a8c..0000000000
--- a/src/shared/utils/gigs.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Gig work utils
- */
-
-import _ from 'lodash';
-
-/**
- * Salary Type mapper
- * @param {Object} data the data
- */
-export function getSalaryType(data) {
- switch (data.id) {
- case 1: return 'monthly';
- case 2: return 'annual';
- case 3: return 'week';
- case 4: return 'daily';
- case 5: return 'hourly';
- default: return 'n/a';
- }
-}
-
-/**
- * Custom Field mapper
- * @param {Array} data the data
- */
-export function getCustomField(data, key) {
- const val = _.find(data, {
- field_name: key,
- });
- return val && val.value ? val.value : 'n/a';
-}
diff --git a/src/shared/utils/url.js b/src/shared/utils/url.js
index 495de94486..c7e93027d7 100644
--- a/src/shared/utils/url.js
+++ b/src/shared/utils/url.js
@@ -196,14 +196,6 @@ export const getSubPageConfiguration = (location, loginUserHandle) => {
const url = (location || window.location).pathname;
- if (url.includes('/gigs')) {
- toolName = 'Gigs';
- toolRoot = '/gigs';
- loginRedirect = '/gigs';
- type = 'tool';
- fullFooter = false;
- }
-
if (url.includes('/thrive')) {
toolName = 'Articles';
toolRoot = '/thrive';
@@ -228,6 +220,14 @@ export const getSubPageConfiguration = (location, loginUserHandle) => {
fullFooter = false;
}
+ if (url.includes('/engagements')) {
+ toolName = 'Opportunities';
+ toolRoot = '/challenges';
+ loginRedirect = '/engagements';
+ type = 'tool';
+ fullFooter = false;
+ }
+
if (url.includes('/members')) {
const handle = url.substring(url.lastIndexOf('/') + 1);
toolName = loginUserHandle && handle && loginUserHandle.toLowerCase() === handle.toLocaleLowerCase() ? 'My Profile' : 'Profiles';
@@ -253,14 +253,6 @@ export const getSubPageConfiguration = (location, loginUserHandle) => {
fullFooter = true;
}
- if (url.includes('/community/gig-resources')) {
- toolName = 'Gigs';
- toolRoot = '/community/gig-resources';
- loginRedirect = '/community/gig-resources';
- type = 'marketing';
- fullFooter = true;
- }
-
if (url.includes('/community/practice')) {
toolName = 'Challenge Practice';
toolRoot = '/community/practice';
diff --git a/src/test/jmeter/Community-25UV.jmx b/src/test/jmeter/Community-25UV.jmx
index 184149b02d..b867126807 100644
--- a/src/test/jmeter/Community-25UV.jmx
+++ b/src/test/jmeter/Community-25UV.jmx
@@ -409,7 +409,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=${pgn}&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=${pgn}&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -451,7 +451,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=5&sortBy=name&sortOrder=asc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=5&sortBy=name&sortOrder=asc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -481,7 +481,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=5&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=5&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -511,7 +511,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -571,7 +571,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -601,7 +601,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -631,7 +631,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
GET
true
false
@@ -661,7 +661,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
GET
true
false
@@ -691,7 +691,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
GET
true
false
@@ -721,7 +721,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
GET
true
false
@@ -751,7 +751,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
GET
true
false
@@ -781,7 +781,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
GET
true
false
@@ -811,7 +811,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
GET
true
false
@@ -841,7 +841,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
GET
true
false
@@ -871,7 +871,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
GET
true
false
@@ -901,7 +901,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
GET
true
false
@@ -931,7 +931,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
GET
true
false
@@ -961,7 +961,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
GET
true
false
@@ -991,7 +991,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
GET
true
false
@@ -1021,7 +1021,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
GET
true
false
@@ -1051,7 +1051,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
GET
true
false
@@ -1081,7 +1081,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
GET
true
false
@@ -1111,7 +1111,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
GET
true
false
@@ -1141,7 +1141,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
GET
true
false
@@ -1171,7 +1171,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
GET
true
false
@@ -1201,7 +1201,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
GET
true
false
@@ -1231,7 +1231,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
GET
true
false
@@ -1261,7 +1261,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
GET
true
false
@@ -1291,7 +1291,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
GET
true
false
@@ -1321,7 +1321,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
GET
true
false
@@ -1351,7 +1351,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
GET
true
false
@@ -1381,7 +1381,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
GET
true
false
@@ -1411,7 +1411,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
GET
true
false
@@ -1441,7 +1441,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
GET
true
false
@@ -1471,7 +1471,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
GET
true
false
@@ -1501,7 +1501,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
GET
true
false
@@ -1531,7 +1531,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
GET
true
false
@@ -1561,7 +1561,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
GET
true
false
@@ -1591,7 +1591,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
GET
true
false
@@ -1621,7 +1621,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
GET
true
false
@@ -1651,7 +1651,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
GET
true
false
@@ -1681,7 +1681,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
GET
true
false
@@ -1711,7 +1711,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&tracks[]=Dev&types[]=CH&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&tracks[]=Dev&types[]=CH&types[]=TSK
GET
true
false
@@ -1741,7 +1741,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?startDateEnd=2020-01-31T18%3A29%3A59.999Z&endDateStart=2019-12-31T18%3A30%3A00.000Z&status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?startDateEnd=2020-01-31T18%3A29%3A59.999Z&endDateStart=2019-12-31T18%3A30%3A00.000Z&status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -1939,7 +1939,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=${tags}&tab=details&status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=${tags}&tab=details&status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -1981,7 +1981,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=topcoder&status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=topcoder&status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -2011,7 +2011,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=topcoder&status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=topcoder&status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -2041,7 +2041,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=topcoder&status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=topcoder&status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -2331,7 +2331,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=${pgn}&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=${pgn}&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -2373,7 +2373,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=5&sortBy=name&sortOrder=asc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=5&sortBy=name&sortOrder=asc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -2403,7 +2403,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=5&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=5&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -2433,7 +2433,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -2493,7 +2493,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -2523,7 +2523,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -2553,7 +2553,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
GET
true
false
@@ -2583,7 +2583,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
GET
true
false
@@ -2613,7 +2613,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
GET
true
false
@@ -2643,7 +2643,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
GET
true
false
@@ -2673,7 +2673,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
GET
true
false
@@ -2703,7 +2703,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
GET
true
false
@@ -2733,7 +2733,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
GET
true
false
@@ -2763,7 +2763,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
GET
true
false
@@ -2793,7 +2793,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
GET
true
false
@@ -2823,7 +2823,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
GET
true
false
@@ -2853,7 +2853,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
GET
true
false
@@ -2883,7 +2883,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
GET
true
false
@@ -2913,7 +2913,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
GET
true
false
@@ -2943,7 +2943,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
GET
true
false
@@ -2973,7 +2973,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
GET
true
false
@@ -3003,7 +3003,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
GET
true
false
@@ -3033,7 +3033,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
GET
true
false
@@ -3063,7 +3063,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
GET
true
false
@@ -3093,7 +3093,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
GET
true
false
@@ -3123,7 +3123,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
GET
true
false
@@ -3153,7 +3153,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
GET
true
false
@@ -3183,7 +3183,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
GET
true
false
@@ -3213,7 +3213,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
GET
true
false
@@ -3243,7 +3243,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
GET
true
false
@@ -3273,7 +3273,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
GET
true
false
@@ -3303,7 +3303,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
GET
true
false
@@ -3333,7 +3333,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
GET
true
false
@@ -3363,7 +3363,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
GET
true
false
@@ -3393,7 +3393,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
GET
true
false
@@ -3423,7 +3423,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
GET
true
false
@@ -3453,7 +3453,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
GET
true
false
@@ -3483,7 +3483,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
GET
true
false
@@ -3513,7 +3513,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
GET
true
false
@@ -3543,7 +3543,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
GET
true
false
@@ -3573,7 +3573,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
GET
true
false
@@ -3603,7 +3603,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
GET
true
false
@@ -3633,7 +3633,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&tracks[]=Dev&types[]=CH&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&tracks[]=Dev&types[]=CH&types[]=TSK
GET
true
false
@@ -3663,7 +3663,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?startDateEnd=2020-01-31T18%3A29%3A59.999Z&endDateStart=2019-12-31T18%3A30%3A00.000Z&status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?startDateEnd=2020-01-31T18%3A29%3A59.999Z&endDateStart=2019-12-31T18%3A30%3A00.000Z&status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -3861,7 +3861,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=${tags}&tab=details&status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=${tags}&tab=details&status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -3903,7 +3903,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=topcoder&status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=topcoder&status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -3933,7 +3933,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=topcoder&status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=topcoder&status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -3963,7 +3963,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=topcoder&status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=topcoder&status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -4183,7 +4183,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=${pgn}&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=${pgn}&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -4225,7 +4225,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=5&sortBy=name&sortOrder=asc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=5&sortBy=name&sortOrder=asc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -4255,7 +4255,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=5&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=5&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -4285,7 +4285,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -4345,7 +4345,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -4375,7 +4375,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -4405,7 +4405,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
GET
true
false
@@ -4435,7 +4435,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
GET
true
false
@@ -4465,7 +4465,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
GET
true
false
@@ -4495,7 +4495,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
GET
true
false
@@ -4525,7 +4525,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
GET
true
false
@@ -4555,7 +4555,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
GET
true
false
@@ -4585,7 +4585,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
GET
true
false
@@ -4615,7 +4615,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
GET
true
false
@@ -4645,7 +4645,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
GET
true
false
@@ -4675,7 +4675,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
GET
true
false
@@ -4705,7 +4705,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
GET
true
false
@@ -4735,7 +4735,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
GET
true
false
@@ -4765,7 +4765,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
GET
true
false
@@ -4795,7 +4795,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
GET
true
false
@@ -4825,7 +4825,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
GET
true
false
@@ -4855,7 +4855,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
GET
true
false
@@ -4885,7 +4885,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
GET
true
false
@@ -4915,7 +4915,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
GET
true
false
@@ -4945,7 +4945,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
GET
true
false
@@ -4975,7 +4975,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
GET
true
false
@@ -5005,7 +5005,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
GET
true
false
@@ -5035,7 +5035,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
GET
true
false
@@ -5065,7 +5065,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
GET
true
false
@@ -5095,7 +5095,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
GET
true
false
@@ -5125,7 +5125,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
GET
true
false
@@ -5155,7 +5155,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
GET
true
false
@@ -5185,7 +5185,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
GET
true
false
@@ -5215,7 +5215,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
GET
true
false
@@ -5245,7 +5245,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
GET
true
false
@@ -5275,7 +5275,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
GET
true
false
@@ -5305,7 +5305,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
GET
true
false
@@ -5335,7 +5335,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
GET
true
false
@@ -5365,7 +5365,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
GET
true
false
@@ -5395,7 +5395,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
GET
true
false
@@ -5425,7 +5425,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
GET
true
false
@@ -5455,7 +5455,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
GET
true
false
@@ -5485,7 +5485,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&tracks[]=Dev&types[]=CH&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&tracks[]=Dev&types[]=CH&types[]=TSK
GET
true
false
@@ -5515,7 +5515,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?startDateEnd=2020-01-31T18%3A29%3A59.999Z&endDateStart=2019-12-31T18%3A30%3A00.000Z&status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?startDateEnd=2020-01-31T18%3A29%3A59.999Z&endDateStart=2019-12-31T18%3A30%3A00.000Z&status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -5713,7 +5713,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=${tags}&tab=details&status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=${tags}&tab=details&status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -5755,7 +5755,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=topcoder&status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=topcoder&status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -5785,7 +5785,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=topcoder&status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=topcoder&status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -5815,7 +5815,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=topcoder&status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=topcoder&status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -5979,7 +5979,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=${pgn}&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=${pgn}&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -6021,7 +6021,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=5&sortBy=name&sortOrder=asc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=5&sortBy=name&sortOrder=asc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -6051,7 +6051,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=5&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=5&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -6081,7 +6081,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -6141,7 +6141,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -6171,7 +6171,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -6201,7 +6201,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
GET
true
false
@@ -6231,7 +6231,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
GET
true
false
@@ -6261,7 +6261,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
GET
true
false
@@ -6291,7 +6291,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
GET
true
false
@@ -6321,7 +6321,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
GET
true
false
@@ -6351,7 +6351,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
GET
true
false
@@ -6381,7 +6381,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
GET
true
false
@@ -6411,7 +6411,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
GET
true
false
@@ -6441,7 +6441,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
GET
true
false
@@ -6471,7 +6471,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
GET
true
false
@@ -6501,7 +6501,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
GET
true
false
@@ -6531,7 +6531,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
GET
true
false
@@ -6561,7 +6561,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
GET
true
false
@@ -6591,7 +6591,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
GET
true
false
@@ -6621,7 +6621,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
GET
true
false
@@ -6651,7 +6651,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
GET
true
false
@@ -6681,7 +6681,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
GET
true
false
@@ -6711,7 +6711,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
GET
true
false
@@ -6741,7 +6741,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
GET
true
false
@@ -6771,7 +6771,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
GET
true
false
@@ -6801,7 +6801,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
GET
true
false
@@ -6831,7 +6831,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
GET
true
false
@@ -6861,7 +6861,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
GET
true
false
@@ -6891,7 +6891,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
GET
true
false
@@ -6921,7 +6921,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
GET
true
false
@@ -6951,7 +6951,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
GET
true
false
@@ -6981,7 +6981,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
GET
true
false
@@ -7011,7 +7011,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
GET
true
false
@@ -7041,7 +7041,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
GET
true
false
@@ -7071,7 +7071,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
GET
true
false
@@ -7101,7 +7101,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
GET
true
false
@@ -7131,7 +7131,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
GET
true
false
@@ -7161,7 +7161,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
GET
true
false
@@ -7191,7 +7191,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
GET
true
false
@@ -7221,7 +7221,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
GET
true
false
@@ -7251,7 +7251,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
GET
true
false
@@ -7281,7 +7281,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&tracks[]=Dev&types[]=CH&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&tracks[]=Dev&types[]=CH&types[]=TSK
GET
true
false
@@ -7311,7 +7311,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?startDateEnd=2020-01-31T18%3A29%3A59.999Z&endDateStart=2019-12-31T18%3A30%3A00.000Z&status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?startDateEnd=2020-01-31T18%3A29%3A59.999Z&endDateStart=2019-12-31T18%3A30%3A00.000Z&status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -7509,7 +7509,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=${tags}&tab=details&status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=${tags}&tab=details&status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -7551,7 +7551,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=topcoder&status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=topcoder&status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -7581,7 +7581,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=topcoder&status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=topcoder&status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -7611,7 +7611,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=topcoder&status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=topcoder&status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -7768,7 +7768,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=${pgn}&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=${pgn}&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -7810,7 +7810,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=5&sortBy=name&sortOrder=asc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=5&sortBy=name&sortOrder=asc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -7840,7 +7840,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=5&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=5&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -7870,7 +7870,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -7930,7 +7930,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -7960,7 +7960,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&tracks[]=Des&tracks[]=Dev&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -7990,7 +7990,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
GET
true
false
@@ -8020,7 +8020,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
GET
true
false
@@ -8050,7 +8050,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=CH
GET
true
false
@@ -8080,7 +8080,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
GET
true
false
@@ -8110,7 +8110,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
GET
true
false
@@ -8140,7 +8140,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=F2F
GET
true
false
@@ -8170,7 +8170,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
GET
true
false
@@ -8200,7 +8200,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
GET
true
false
@@ -8230,7 +8230,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Des&types[]=TSK
GET
true
false
@@ -8260,7 +8260,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
GET
true
false
@@ -8290,7 +8290,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
GET
true
false
@@ -8320,7 +8320,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=CH
GET
true
false
@@ -8350,7 +8350,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
GET
true
false
@@ -8380,7 +8380,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
GET
true
false
@@ -8410,7 +8410,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=F2F
GET
true
false
@@ -8440,7 +8440,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
GET
true
false
@@ -8470,7 +8470,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
GET
true
false
@@ -8500,7 +8500,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&types[]=TSK
GET
true
false
@@ -8530,7 +8530,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
GET
true
false
@@ -8560,7 +8560,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
GET
true
false
@@ -8590,7 +8590,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=CH
GET
true
false
@@ -8620,7 +8620,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
GET
true
false
@@ -8650,7 +8650,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
GET
true
false
@@ -8680,7 +8680,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=F2F
GET
true
false
@@ -8710,7 +8710,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
GET
true
false
@@ -8740,7 +8740,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
GET
true
false
@@ -8770,7 +8770,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=DS&types[]=TSK
GET
true
false
@@ -8800,7 +8800,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
GET
true
false
@@ -8830,7 +8830,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
GET
true
false
@@ -8860,7 +8860,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=CH
GET
true
false
@@ -8890,7 +8890,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
GET
true
false
@@ -8920,7 +8920,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
GET
true
false
@@ -8950,7 +8950,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=F2F
GET
true
false
@@ -8980,7 +8980,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
GET
true
false
@@ -9010,7 +9010,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
+ /v5/challenges/?status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
GET
true
false
@@ -9040,7 +9040,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
+ /v5/challenges/?status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&types[]=TSK
GET
true
false
@@ -9070,7 +9070,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&tracks[]=Dev&types[]=CH&types[]=TSK
+ /v5/challenges/?status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=QA&tracks[]=Dev&types[]=CH&types[]=TSK
GET
true
false
@@ -9100,7 +9100,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?startDateEnd=2020-01-31T18%3A29%3A59.999Z&endDateStart=2019-12-31T18%3A30%3A00.000Z&status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?startDateEnd=2020-01-31T18%3A29%3A59.999Z&endDateStart=2019-12-31T18%3A30%3A00.000Z&status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -9298,7 +9298,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=${tags}&tab=details&status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=${tags}&tab=details&status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -9340,7 +9340,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=topcoder&status=Active&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=topcoder&status=ACTIVE&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -9370,7 +9370,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=topcoder&status=Active¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=topcoder&status=ACTIVE¤tPhaseName=Registration&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
@@ -9400,7 +9400,7 @@ start up time/ramp-up time = Shutdown time/ramp-down time of the previous record
https
- /v5/challenges/?search=topcoder&status=Completed&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
+ /v5/challenges/?search=topcoder&status=COMPLETED&perPage=10&page=1&sortBy=startDate&sortOrder=desc&tracks[]=Dev&tracks[]=Des&tracks[]=DS&tracks[]=QA&types[]=CH&types[]=F2F&types[]=TSK
GET
true
false
diff --git a/src/test/jmeter/path.csv b/src/test/jmeter/path.csv
index 1a045c243e..47c5980622 100644
--- a/src/test/jmeter/path.csv
+++ b/src/test/jmeter/path.csv
@@ -3,7 +3,6 @@ path
/members/codejam
/challenges
/community/arena
-/gigs
/community/practice
/thrive/tracks?track=Competitive%20Programming
/thrive/tracks?track=Data%20Science&tax=
@@ -30,4 +29,4 @@ path
/settings/account
/settings/account#my-account
/settings/account#linked-accounts
-/settings/preferences
\ No newline at end of file
+/settings/preferences