diff --git a/src/shared/containers/EDU/Tracks.jsx b/src/shared/containers/EDU/Tracks.jsx
index 21de200219..0a1b4c8398 100644
--- a/src/shared/containers/EDU/Tracks.jsx
+++ b/src/shared/containers/EDU/Tracks.jsx
@@ -21,6 +21,7 @@ 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';
// Partials
import ResultTabs from './partials/ResultTabs';
// CSS
@@ -33,6 +34,7 @@ const TRACK_BANNER_BACK_COLORS = {
'Competitive Programming': '#FFA45D',
QA: '#8AFB8A',
Topcoder: '#2A2A2A',
+ 'Gig Work': '#ef476f',
};
const TRACK_IMAGES = {
Development: Dev,
@@ -41,6 +43,7 @@ const TRACK_IMAGES = {
'Competitive Programming': Algo,
QA,
Topcoder,
+ 'Gig Work': GigWork,
};
export default class EDUTracks extends React.Component {
diff --git a/src/shared/containers/EDU/styles/home.scss b/src/shared/containers/EDU/styles/home.scss
index 4efb6e3808..2b1222816d 100644
--- a/src/shared/containers/EDU/styles/home.scss
+++ b/src/shared/containers/EDU/styles/home.scss
@@ -181,6 +181,14 @@
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/RecruitCRMJobs.jsx b/src/shared/containers/Gigs/RecruitCRMJobs.jsx
index e9ffd09d65..d09ba71afc 100644
--- a/src/shared/containers/Gigs/RecruitCRMJobs.jsx
+++ b/src/shared/containers/Gigs/RecruitCRMJobs.jsx
@@ -22,7 +22,7 @@ class RecruitCRMJobsContainer extends React.Component {
this.state = {
term: '',
page: 0,
- sortBy: 'updated_on',
+ sortBy: 'created_on',
};
this.onSearch = this.onSearch.bind(this);
diff --git a/src/shared/routes/StartPage.jsx b/src/shared/routes/StartPage.jsx
new file mode 100644
index 0000000000..dca924c079
--- /dev/null
+++ b/src/shared/routes/StartPage.jsx
@@ -0,0 +1,21 @@
+/**
+ * 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/index.jsx b/src/shared/routes/index.jsx
index 9c8eb25569..be51690503 100644
--- a/src/shared/routes/index.jsx
+++ b/src/shared/routes/index.jsx
@@ -3,7 +3,9 @@
*/
import CommunityLoader from 'containers/tc-communities/Loader';
+import ContentfulRoute from 'components/Contentful/Route';
import Content from 'components/Content';
+import Footer from 'components/TopcoderFooter';
import React from 'react';
import {
@@ -103,6 +105,19 @@ function Routes({ communityId }) {
exact
path={`${config.GIGS_PAGES_PATH}/:id?`}
/>
+ (
+
+
+
+
+ )}
+ exact
+ path={config.START_PAGE_PATH}
+ />
diff --git a/src/shared/services/contentful.js b/src/shared/services/contentful.js
index afe482c83d..4508f76d6d 100644
--- a/src/shared/services/contentful.js
+++ b/src/shared/services/contentful.js
@@ -21,13 +21,11 @@ if (isomorphy.isServerSide()) {
/* eslint-enable global-require */
}
-const LOCAL_MODE = Boolean(config.CONTENTFUL.LOCAL_MODE);
-
// Education Center Taxonomy
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'];
+const EDU_TRACK_KEYS = ['dataScience', 'competitiveProgramming', 'design', 'development', 'qualityAssurance', 'topcoder', 'gigWork'];
const EDU_ARTICLE_TYPES = ['Article', 'Video', 'Forum post'];
@@ -37,7 +35,7 @@ const EDU_ARTICLE_TYPES = ['Article', 'Video', 'Forum post'];
/* Holds the base URL of Community App endpoints that proxy HTTP request to
* Contentful APIs. */
-const PROXY_ENDPOINT = `${LOCAL_MODE ? '' : config.URL.APP}/api/cdn/public/contentful`;
+const PROXY_ENDPOINT = '/api/cdn/public/contentful';
/* At the client-side only, it holds the cached index of published Contentful
* assets and content. Do not use it directly, use getIndex() function below
* instead (it takes care about updating this when necessary). */
diff --git a/src/shared/utils/contentful.js b/src/shared/utils/contentful.js
index a7b4880310..76f1614077 100644
--- a/src/shared/utils/contentful.js
+++ b/src/shared/utils/contentful.js
@@ -122,17 +122,22 @@ export function menuItemBuilder(baseUrl, item) {
export function tracksTreeBuilder(EDUTaxonomy, query) {
const tax = _.isArray(query.tax) ? query.tax : [query.tax];
let id = 0;
- return _.sortBy(
+ const res = _.sortBy(
_.map(EDUTaxonomy, (categories, track) => ({
title: track,
id: id++,
items: _.sortBy(_.map(categories, cat => ({
- title: cat.name, id: id++, items: [], track, selected: _.indexOf(tax, cat.name) !== -1,
+ title: cat.name,
+ id: id++,
+ items: [],
+ track,
+ selected: _.indexOf(tax, cat.name) !== -1 && track === query.track,
})), ['title']),
selected: query.track === track,
})),
['title'],
);
+ return res;
}
export default undefined;