-
- {challenge.name}
-
+
{challenge.name}
{challenge.status === 'ACTIVE' ? 'Ends ' : 'Ended '}
@@ -93,7 +102,8 @@ function ChallengeCard({
@@ -104,12 +114,14 @@ function ChallengeCard({
ChallengeCard.defaultProps = {
onTechTagClicked: _.noop,
challenge: {},
+ openChallengesInNewTabs: false,
sampleWinnerProfile: undefined,
};
ChallengeCard.propTypes = {
onTechTagClicked: PT.func,
challenge: PT.shape(),
+ openChallengesInNewTabs: PT.bool,
sampleWinnerProfile: PT.shape(),
};
@@ -151,8 +163,9 @@ class Tags extends React.Component {
/* TODO: Find out why all tags beside the first one are prepended
* with whitespaces? */
onClick={() => this.onClick(c.trim())}
- >{c}
-
+ role="button"
+ tabIndex={0}
+ >{c}
));
}
return '';
diff --git a/src/shared/components/challenge-listing/Listing/Bucket/index.jsx b/src/shared/components/challenge-listing/Listing/Bucket/index.jsx
index 69c6ff0959..e4909beed2 100644
--- a/src/shared/components/challenge-listing/Listing/Bucket/index.jsx
+++ b/src/shared/components/challenge-listing/Listing/Bucket/index.jsx
@@ -22,6 +22,7 @@ export default function Bucket({
expand,
loading,
loadMore,
+ openChallengesInNewTabs,
setFilterState,
setSort,
sort,
@@ -50,6 +51,7 @@ export default function Bucket({
setFilterState({ tags: [tag] })}
+ openChallengesInNewTabs={openChallengesInNewTabs}
key={item.id}
/>
));
@@ -101,6 +103,7 @@ Bucket.defaultProps = {
expand: _.noop,
loading: false,
loadMore: null,
+ openChallengesInNewTabs: false,
sort: null,
};
@@ -111,6 +114,7 @@ Bucket.propTypes = {
challenges: PT.arrayOf(PT.shape()).isRequired,
loading: PT.bool,
loadMore: PT.func,
+ openChallengesInNewTabs: PT.bool,
setFilterState: PT.func.isRequired,
setSort: PT.func.isRequired,
sort: PT.string,
diff --git a/src/shared/components/challenge-listing/Listing/index.jsx b/src/shared/components/challenge-listing/Listing/index.jsx
index 6c97b2edbb..f1e72cbc04 100644
--- a/src/shared/components/challenge-listing/Listing/index.jsx
+++ b/src/shared/components/challenge-listing/Listing/index.jsx
@@ -17,6 +17,7 @@ export default function Listing({
loadingPastChallenges,
loadMoreDraft,
loadMorePast,
+ openChallengesInNewTabs,
selectBucket,
setFilterState,
setSort,
@@ -47,6 +48,7 @@ export default function Listing({
expanded
loading={loading}
loadMore={loadMore}
+ openChallengesInNewTabs={openChallengesInNewTabs}
setFilterState={setFilterState}
setSort={sort => setSort(activeBucket, sort)}
sort={sorts[activeBucket]}
@@ -76,6 +78,7 @@ export default function Listing({
expand={() => selectBucket(bucket)}
loading={loading}
loadMore={loadMore}
+ openChallengesInNewTabs={openChallengesInNewTabs}
setFilterState={setFilterState}
setSort={sort => setSort(bucket, sort)}
sort={sorts[bucket]}
@@ -98,14 +101,15 @@ export default function Listing({
}
Listing.defaultProps = {
+ challenges: [],
+ currentFilterName: '',
+ expanded: false,
groupId: '',
loadMoreDraft: null,
loadMorePast: null,
onTechTagClicked: _.noop,
onExpandFilterResult: _.noop,
- currentFilterName: '',
- challenges: [],
- expanded: false,
+ openChallengesInNewTabs: false,
};
Listing.propTypes = {
@@ -121,6 +125,7 @@ Listing.propTypes = {
loadingPastChallenges: PT.bool.isRequired,
loadMoreDraft: PT.func,
loadMorePast: PT.func,
+ openChallengesInNewTabs: PT.bool,
selectBucket: PT.func.isRequired,
setFilterState: PT.func.isRequired,
setSort: PT.func.isRequired,
diff --git a/src/shared/components/challenge-listing/index.jsx b/src/shared/components/challenge-listing/index.jsx
index 9abef8bca8..651ac2850e 100755
--- a/src/shared/components/challenge-listing/index.jsx
+++ b/src/shared/components/challenge-listing/index.jsx
@@ -74,6 +74,7 @@ export default function ChallengeListing(props) {
loadingPastChallenges={props.loadingPastChallenges}
loadMoreDraft={props.loadMoreDraft}
loadMorePast={props.loadMorePast}
+ openChallengesInNewTabs={props.openChallengesInNewTabs}
selectBucket={props.selectBucket}
setFilterState={props.setFilterState}
setSort={props.setSort}
@@ -137,13 +138,14 @@ export default function ChallengeListing(props) {
}
ChallengeListing.defaultProps = {
- groupId: '',
+ auth: null,
communityFilter: null,
communityName: null,
+ groupId: '',
+ hideTcLinksInFooter: false,
loadMoreDraft: null,
loadMorePast: null,
- hideTcLinksInFooter: false,
- auth: null,
+ openChallengesInNewTabs: false,
};
ChallengeListing.propTypes = {
@@ -159,6 +161,7 @@ ChallengeListing.propTypes = {
loadingPastChallenges: PT.bool.isRequired,
loadMoreDraft: PT.func,
loadMorePast: PT.func,
+ openChallengesInNewTabs: PT.bool,
selectBucket: PT.func.isRequired,
setFilterState: PT.func.isRequired,
setSort: PT.func.isRequired,
diff --git a/src/shared/components/tc-communities/Header/index.jsx b/src/shared/components/tc-communities/Header/index.jsx
index 0ec4196d86..b574c67a8b 100644
--- a/src/shared/components/tc-communities/Header/index.jsx
+++ b/src/shared/components/tc-communities/Header/index.jsx
@@ -245,7 +245,13 @@ Header.propTypes = {
title: PT.string.isRequired,
url: PT.string.isRequired,
})),
- logos: PT.arrayOf(PT.string),
+ logos: PT.arrayOf(PT.oneOfType([
+ PT.string,
+ PT.shape({
+ img: PT.string.isRequired,
+ url: PT.string,
+ }),
+ ])),
additionalLogos: PT.arrayOf(PT.string),
hideSearch: PT.bool,
chevronOverAvatar: PT.bool,
diff --git a/src/shared/components/tc-communities/communities/wipro/Learn/index.jsx b/src/shared/components/tc-communities/communities/wipro/Learn/index.jsx
index 6d38531d63..844dc114ce 100644
--- a/src/shared/components/tc-communities/communities/wipro/Learn/index.jsx
+++ b/src/shared/components/tc-communities/communities/wipro/Learn/index.jsx
@@ -44,9 +44,19 @@ export default function Learn() {
}}
>
-
If you are accessing TopGear Learning Platform from Wipro backbone network, click on continue to access the platform.
-
To access TopGear Learning Platform outside of Wipro network, please follow the below instructions:
-
Send an email to devenvaccessreq.topgear@wipro.com with subject line Internet TopGear portal access. You will receive an email within 24 hours with details for accessing TopGear portal through Virtual Desktop. Using Virtual Desktop you can access https://topgear-app.wipro.com to learn new technologies.
+
If you are accessing TopGear Learning Platform from Wipro backbone network, click on “CONTINUE” to access the platform.
+
To access TopGear Learning Platform outside of Wipro network, please follow the below instructions:
+
+ -
+ Send an email to devenvaccessreq.topgear@wipro.com with subject line Internet TopGear portal access.
+
+ -
+ You will receive an email within 24 hours with details for accessing TopGear portal through Virtual Desktop.
+
+ -
+ Using Virtual Desktop you can access https://topgear-app.wipro.com to learn new technologies.
+
+
diff --git a/src/shared/components/tc-communities/communities/wipro/Learn/style.scss b/src/shared/components/tc-communities/communities/wipro/Learn/style.scss
index c781aff4e5..15b0d03b5b 100644
--- a/src/shared/components/tc-communities/communities/wipro/Learn/style.scss
+++ b/src/shared/components/tc-communities/communities/wipro/Learn/style.scss
@@ -4,6 +4,14 @@
padding-bottom: 60px;
}
+.highlighted {
+ background: #ffc;
+}
+
+.ddashUnderline {
+ border-bottom: 1px dashed #333;
+}
+
.resourcesTitle {
padding-bottom: 50px;
padding-top: 0;
@@ -85,7 +93,7 @@
.message {
color: #333;
- font: 14px/22px 'Akkurat regular', sans-serif;
+ font: 16px/22px 'Akkurat regular', sans-serif;
opacity: 0.7;
a {
@@ -95,16 +103,27 @@
&:focus,
&:visited {
color: #0092ff;
+ font-family: 'Times New Roman', Times, serif;
outline: none;
text-decoration: underline;
}
}
em {
+ font-family: 'Times New Roman', Times, serif;
font-style: italic;
}
+ ol {
+ list-style: decimal inside;
+ padding-left: 24px;
+ }
+
p {
margin-bottom: 24px;
}
+
+ strong {
+ font-weight: bold;
+ }
}
diff --git a/src/shared/containers/SubmissionManagement/index.jsx b/src/shared/containers/SubmissionManagement/index.jsx
index 2e3237218c..7022ac767f 100644
--- a/src/shared/containers/SubmissionManagement/index.jsx
+++ b/src/shared/containers/SubmissionManagement/index.jsx
@@ -186,7 +186,7 @@ const mapDispatchToProps = dispatch => ({
loadMySubmissions: (tokens, challengeId) => {
const a = challengeActions.challenge;
dispatch(a.getSubmissionsInit());
- dispatch(a.getSubmissionsDone(challengeId, tokens.tokenV3, tokens.tokenV2));
+ dispatch(a.getSubmissionsDone(challengeId, tokens.tokenV2));
},
});
diff --git a/src/shared/containers/challenge-listing/Listing/index.jsx b/src/shared/containers/challenge-listing/Listing/index.jsx
index c4b751e5b8..8837a2daf3 100644
--- a/src/shared/containers/challenge-listing/Listing/index.jsx
+++ b/src/shared/containers/challenge-listing/Listing/index.jsx
@@ -31,12 +31,6 @@ import style from './styles.scss';
let mounted = false;
export class ListingContainer extends React.Component {
- /* TODO: We should add here an automatic periodical update of the loaded
- * challenges, say once each 5 minutes. Otherwise, it is possible that a
- * visitor has the same challenge listing page open for too long, navigating
- * withing it, without triggering refresh of the cached challenges - not
- * good! */
-
componentDidMount() {
this.props.markHeaderMenu();
@@ -179,6 +173,7 @@ export class ListingContainer extends React.Component {
loadingChallenges={Boolean(this.props.loadingActiveChallengesUUID)}
loadingDraftChallenges={Boolean(this.props.loadingDraftChallengesUUID)}
loadingPastChallenges={Boolean(this.props.loadingPastChallengesUUID)}
+ openChallengesInNewTabs={this.props.openChallengesInNewTabs}
selectBucket={selectBucket}
hideTcLinksInFooter={hideTcLinksInSidebarFooter}
@@ -215,6 +210,7 @@ ListingContainer.defaultProps = {
communityId: null,
communityName: null,
listingOnly: false,
+ openChallengesInNewTabs: false,
};
ListingContainer.propTypes = {
@@ -248,6 +244,7 @@ ListingContainer.propTypes = {
loadingDraftChallengesUUID: PT.string.isRequired,
loadingPastChallengesUUID: PT.string.isRequired,
markHeaderMenu: PT.func.isRequired,
+ openChallengesInNewTabs: PT.bool,
selectBucket: PT.func.isRequired,
selectCommunity: PT.func.isRequired,
setFilter: PT.func.isRequired,
@@ -281,6 +278,7 @@ const mapStateToProps = (state, ownProps) => {
loadingPastChallengesUUID: cl.loadingPastChallengesUUID,
loadingChallengeSubtracks: cl.loadingChallengeSubtracks,
loadingChallengeTags: cl.loadingChallengeTags,
+ openChallengesInNewTabs: ownProps.openChallengesInNewTabs,
selectedCommunityId: cl.selectedCommunityId,
sorts: cl.sorts,
activeBucket: cl.sidebar.activeBucket,
diff --git a/src/shared/containers/tc-communities/Page/index.jsx b/src/shared/containers/tc-communities/Page/index.jsx
index fae49f7589..36ec83f283 100644
--- a/src/shared/containers/tc-communities/Page/index.jsx
+++ b/src/shared/containers/tc-communities/Page/index.jsx
@@ -171,6 +171,9 @@ export class Page extends Component {
history={this.props.history}
hideTcLinksInSidebarFooter={this.props.meta.communityId === 'wipro'}
location={this.props.location}
+ openChallengesInNewTabs={
+ _.get(this.props.meta, 'challengeListing.openChallengesInNewTabs')
+ }
/>);
break;
}
@@ -260,6 +263,9 @@ Page.propTypes = {
authorizedGroupIds: PT.arrayOf(PT.string),
challengeFilterTag: PT.string,
groupId: PT.string,
+ challengeListing: PT.shape({
+ openChallengesInNewTabs: PT.bool,
+ }),
communityId: PT.string,
communityName: PT.string,
communitySelector: PT.arrayOf(PT.shape()),
@@ -271,7 +277,13 @@ Page.propTypes = {
leaderboardApiUrl: PT.string,
loading: PT.bool,
- logos: PT.arrayOf(PT.string).isRequired,
+ logos: PT.arrayOf(PT.oneOfType([
+ PT.string,
+ PT.shape({
+ img: PT.string.isRequired,
+ url: PT.string,
+ }),
+ ])),
additionalLogos: PT.arrayOf(PT.string),
stats: PT.shape(),
hideSearch: PT.bool,
diff --git a/src/shared/reducers/tc-communities/meta.js b/src/shared/reducers/tc-communities/meta.js
index b876e041ab..4b3592f944 100644
--- a/src/shared/reducers/tc-communities/meta.js
+++ b/src/shared/reducers/tc-communities/meta.js
@@ -16,25 +16,25 @@ function onDone(state, action) {
// if everything is ok, populate data from payload
return {
...state,
+ additionalLogos: action.payload.additionalLogos,
authorizedGroupIds: action.payload.authorizedGroupIds,
challengeFilter: action.payload.challengeFilter,
- challengeFilterTag: action.payload.challengeFilterTag,
- groupId: action.payload.groupId,
+ challengeListing: action.payload.challengeListing,
+ chevronOverAvatar: action.payload.chevronOverAvatar,
communityId: action.payload.communityId,
communityName: action.payload.communityName,
communitySelector: action.payload.communitySelector,
cssUrl: action.payload.style,
- logos: action.payload.logos,
- hideSearch: action.payload.hideSearch,
- additionalLogos: action.payload.additionalLogos,
- chevronOverAvatar: action.payload.chevronOverAvatar,
- footerText: action.payload.footerText,
- stats: action.payload.stats,
- menuItems: action.payload.menuItems,
failed: false,
+ footerText: action.payload.footerText,
+ hideSearch: action.payload.hideSearch,
+ groupId: action.payload.groupId,
leaderboardApiUrl: action.payload.leaderboardApiUrl,
loading: false,
+ logos: action.payload.logos,
+ menuItems: action.payload.menuItems,
newsFeed: action.payload.newsFeed,
+ stats: action.payload.stats,
};
}
// if community is not found or other error