Community Awards & Honors
+
+ View All Badges
+
@@ -29,6 +38,10 @@ const Awards = ({ badges }) => {
if (description) {
description = md(description);
}
+ let awardedAt = _.get(reward, 'awarded_at');
+ if (awardedAt) {
+ awardedAt = format(new Date(awardedAt), 'PPP');
+ }
return (
{
title,
description,
imageUrl,
+ awardedAt,
});
}}
/>
@@ -77,6 +91,7 @@ Awards.defaultProps = {
Awards.propTypes = {
badges: PT.arrayOf(PT.shape()),
+ info: PT.shape().isRequired,
};
export default Awards;
diff --git a/src/shared/components/ProfilePage/Awards/styles.scss b/src/shared/components/ProfilePage/Awards/styles.scss
index 2fc895902b..8b272ce659 100644
--- a/src/shared/components/ProfilePage/Awards/styles.scss
+++ b/src/shared/components/ProfilePage/Awards/styles.scss
@@ -19,6 +19,13 @@
cursor: pointer;
margin-top: 5px;
}
+
+ .badgesPageLink {
+ text-transform: uppercase;
+ color: $listing-checkbox-green;
+ font-weight: 700;
+ font-family: Roboto, sans-serif;
+ }
}
.awards {
@@ -28,7 +35,7 @@
padding-bottom: 32px;
.header {
- padding: 32px 0 20px 32px;
+ padding: 32px 32px 20px 32px;
@include xs-to-sm {
padding: 16px 0 16px 16px;
diff --git a/src/shared/components/ProfilePage/index.jsx b/src/shared/components/ProfilePage/index.jsx
index c981a9fd20..60953d0d5d 100644
--- a/src/shared/components/ProfilePage/index.jsx
+++ b/src/shared/components/ProfilePage/index.jsx
@@ -229,7 +229,7 @@ class ProfilePage extends React.Component {
{
(config.GAMIFICATION.ENABLE_BADGE_UI && badges && (badges.rows || [])).length ? (
-
+
) : null
}
{tcAcademyCertifications.length > 0 && (
diff --git a/src/shared/components/challenge-detail/Header/index.jsx b/src/shared/components/challenge-detail/Header/index.jsx
index a92b2e90a6..3cd0d3328f 100644
--- a/src/shared/components/challenge-detail/Header/index.jsx
+++ b/src/shared/components/challenge-detail/Header/index.jsx
@@ -397,7 +397,7 @@ export default function ChallengeHeader(props) {
onClick={unregisterFromChallenge}
theme={{
button: unregisterButtonDisabled
- ? style.submitButtonDisabled
+ ? style.unregisterButtonDisabled
: style.unregisterButton,
}}
>
@@ -423,16 +423,16 @@ export default function ChallengeHeader(props) {
Submit
{
- track === COMPETITION_TRACKS.DES && hasRegistered && !unregistering
+ track === COMPETITION_TRACKS.DES && hasRegistered && !unregistering
&& hasSubmissions && (
-
- View Submissions
-
- )
- }
+
+ View Submissions
+
+ )
+ }
diff --git a/src/shared/components/challenge-detail/Header/style.scss b/src/shared/components/challenge-detail/Header/style.scss
index f97c457a6d..a3daf5e533 100644
--- a/src/shared/components/challenge-detail/Header/style.scss
+++ b/src/shared/components/challenge-detail/Header/style.scss
@@ -10,66 +10,150 @@
padding: 0 25px !important;
}
-.submitButton {
- margin: $base-unit 0;
+.challenge-ops-container .submitButton {
+ margin: 5px;
min-width: 0;
- width: 100%;
border-radius: 50px !important;
height: 48px;
- padding: 0 25px !important;
background: #137d60 !important;
color: #fff !important;
+ white-space: nowrap;
+ padding: 12px 24px !important;
+ font-size: 16px;
+ line-height: 24px;
+ font-weight: 700;
+ letter-spacing: 0.008em;
@include xs-to-sm {
width: fit-content;
}
}
-.submitButtonDisabled {
- margin: $base-unit 0;
+.challenge-ops-container .submitButtonDisabled {
+ margin: 5px;
min-width: 0;
- width: 100%;
border-radius: 50px !important;
height: 48px;
- padding: 0 25px !important;
+ padding: 12px 24px !important;
color: #767676 !important;
background: #f4f4f4 !important;
+ font-size: 16px;
+ line-height: 24px;
+ font-weight: 700;
+ letter-spacing: 0.008em;
@include xs-to-sm {
width: fit-content;
}
}
-.unregisterButton {
- margin: $base-unit 0;
+.challenge-ops-container .unregisterButton {
+ margin: 5px;
min-width: 0;
- width: 100%;
border-radius: 50px !important;
height: 48px;
- padding: 0 25px !important;
+ padding: 12px 24px !important;
color: #137d60 !important;
- border-color: #137d60 !important;
+ border: 2px solid #137d60 !important;
background: #fff !important;
+ font-size: 16px;
+ line-height: 24px;
+ font-weight: 700;
+ letter-spacing: 0.008em;
@include xs-to-sm {
width: fit-content;
}
}
-.registerBtn {
- margin: $base-unit 0;
+.challenge-ops-container .unregisterButtonDisabled {
+ margin: 5px;
min-width: 0;
- width: 100%;
border-radius: 50px !important;
height: 48px;
- padding: 0 25px !important;
+ padding: 12px 24px !important;
+ color: #767676 !important;
+ border: 2px solid #f4f4f4;
+ background: #fff !important;
+ font-size: 16px;
+ line-height: 24px;
+ font-weight: 700;
+ letter-spacing: 0.008em;
+
+ @include xs-to-sm {
+ width: fit-content;
+ }
+}
+
+.challenge-ops-container .registerBtn {
+ margin: 5px;
+ min-width: 0;
+ border-radius: 50px !important;
+ height: 48px;
+ padding: 12px 24px !important;
background-color: #137d60 !important;
+ font-size: 16px;
+ line-height: 24px;
+ font-weight: 700;
+ letter-spacing: 0.008em;
@include xs-to-sm {
width: fit-content;
}
}
+.challenge-ops-container .submitButton:hover,
+.challenge-ops-container .registerBtn:hover {
+ color: #fff !important;
+ background: #219174 !important;
+ border-color: #219174 !important;
+}
+
+.challenge-ops-container .unregisterButton:hover {
+ color: #219174 !important;
+ border-color: #219174 !important;
+ background: #fff !important;
+}
+
+.challenge-ops-container .submitButton:active,
+.challenge-ops-container .registerBtn:active {
+ color: #fff !important;
+ background: #0d664e !important;
+ border-color: #0d664e !important;
+}
+
+.challenge-ops-container .unregisterButton:active {
+ outline: none !important;
+ box-shadow: none !important;
+ color: #0d664e !important;
+ border-color: #0d664e !important;
+ background: #fff !important;
+}
+
+.challenge-ops-container .submitButton:focus,
+.challenge-ops-container .submitButton:focus-within,
+.challenge-ops-container .submitButton:focus-visible {
+ outline: none !important;
+ box-shadow: none !important;
+ border-color: #0d664e;
+}
+
+.challenge-ops-container .registerBtn:focus,
+.challenge-ops-container .registerBtn:focus-within,
+.challenge-ops-container .registerBtn:focus-visible {
+ outline: none !important;
+ box-shadow: none !important;
+ border-color: #0d664e;
+}
+
+.challenge-ops-container .unregisterButton:focus,
+.challenge-ops-container .unregisterButton:focus-within,
+.challenge-ops-container .unregisterButton:focus-visible {
+ outline: none !important;
+ box-shadow: none !important;
+ border-color: #0d664e;
+}
+
.challenge-ops-container {
display: flex;
margin-top: 32px;
diff --git a/src/shared/components/challenge-listing/Filters/FiltersPanel/index.jsx b/src/shared/components/challenge-listing/Filters/FiltersPanel/index.jsx
index 9506f868d6..bb51b1f3fd 100644
--- a/src/shared/components/challenge-listing/Filters/FiltersPanel/index.jsx
+++ b/src/shared/components/challenge-listing/Filters/FiltersPanel/index.jsx
@@ -31,6 +31,7 @@ import Tooltip from 'components/Tooltip';
import { config, Link } from 'topcoder-react-utils';
import { COMPOSE, PRIORITY } from 'react-css-super-themr';
import { REVIEW_OPPORTUNITY_TYPES } from 'utils/tc';
+import { isReviewerOrAdmin } from 'utils/challenge-listing/helper';
import { isFilterEmpty, isPastBucket, BUCKETS } from 'utils/challenge-listing/buckets';
import SwitchWithLabel from 'components/SwitchWithLabel';
import ChallengeSearchBar from 'containers/challenge-listing/ChallengeSearchBar';
@@ -71,6 +72,7 @@ export default function FiltersPanel({
setExpanded,
setSort,
selectBucket,
+ reviewCount,
}) {
if (hidden && !expanded) {
return (
@@ -382,8 +384,10 @@ export default function FiltersPanel({
disabled={disabled}
expanding={expanding}
isAuth={isAuth}
+ isReviewer={isReviewerOrAdmin(auth)}
selectBucket={selectBucket}
past={past}
+ reviewCount={reviewCount}
/>
@@ -757,6 +761,7 @@ FiltersPanel.defaultProps = {
onClose: _.noop,
expanding: false,
disabled: false,
+ reviewCount: 0,
};
FiltersPanel.propTypes = {
@@ -787,4 +792,5 @@ FiltersPanel.propTypes = {
selectBucket: PT.func.isRequired,
expanding: PT.bool,
disabled: PT.bool,
+ reviewCount: PT.number,
};
diff --git a/src/shared/components/challenge-listing/Listing/ReviewOpportunityBucket/index.jsx b/src/shared/components/challenge-listing/Listing/ReviewOpportunityBucket/index.jsx
index 07cc41627d..9408e22f31 100644
--- a/src/shared/components/challenge-listing/Listing/ReviewOpportunityBucket/index.jsx
+++ b/src/shared/components/challenge-listing/Listing/ReviewOpportunityBucket/index.jsx
@@ -84,7 +84,7 @@ export default function ReviewOpportunityBucket({
filteredOpportunities
? filteredOpportunities.length > 0 && (