Skip to content

Commit 7985917

Browse files
Merge pull request #6708 from topcoder-platform/PROD-2993
Prod 2993
2 parents 0ef33d1 + 7a40fb5 commit 7985917

File tree

17 files changed

+167
-31
lines changed

17 files changed

+167
-31
lines changed

__tests__/shared/components/challenge-listing/Filters/__snapshots__/FiltersPanel.jsx.snap

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,10 @@ exports[`Matches shallow shapshot 2`] = `
6666
disabled={false}
6767
expanding={false}
6868
isAuth={false}
69+
isReviewer={false}
70+
loading={true}
6971
past={false}
72+
reviewCount={0}
7073
/>
7174
</div>
7275
</div>

__tests__/shared/components/challenge-listing/Sidebar/__snapshots__/index.jsx.snap

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ exports[`Matches shallow shapshot 1`] = `
1313
disabled={false}
1414
expanding={false}
1515
isAuth={false}
16+
loading={true}
1617
past={false}
18+
reviewCount={0}
1719
selectBucket={[MockFunction]}
1820
/>
1921
</div>
@@ -36,7 +38,9 @@ exports[`Matches shallow shapshot 2`] = `
3638
disabled={false}
3739
expanding={false}
3840
isAuth={false}
41+
loading={true}
3942
past={false}
43+
reviewCount={0}
4044
selectBucket={[MockFunction]}
4145
/>
4246
</div>

__tests__/shared/components/challenge-listing/__snapshots__/index.jsx.snap

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ exports[`Matches shallow shapshot 1 shapshot 1 1`] = `
2929
>
3030
<Connect(SidebarContainer)
3131
expanding={false}
32+
reviewCount={0}
3233
setFilterState={[MockFunction]}
3334
/>
3435
<Connect(Container)
@@ -99,6 +100,7 @@ exports[`Matches shallow shapshot 2 shapshot 2 1`] = `
99100
>
100101
<Connect(SidebarContainer)
101102
expanding={false}
103+
reviewCount={0}
102104
setFilterState={[MockFunction]}
103105
/>
104106
<Connect(Container)

automated-smoke-test/page-objects/pages/topcoder/challenge-listing/challenge-listing.helper.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -724,7 +724,7 @@ export class ChallengeListingPageHelper {
724724
static async verifyOpenForReviewChallengesOnly() {
725725
await this.waitForSubCommunity();
726726
const openForReviewLink = await ChallengeListingPageObject.filterChallengesBy(
727-
'Open for review'
727+
'Review Opportunities'
728728
);
729729
await openForReviewLink.click();
730730
await this.waitForLoadingNewChallengeList();
@@ -799,11 +799,11 @@ export class ChallengeListingPageHelper {
799799
expect(headers.length).toBe(0);
800800

801801
const openForReviewLink = await ChallengeListingPageObject.filterChallengesBy(
802-
'Open for review'
802+
'Review Opportunities'
803803
);
804804
await openForReviewLink.click();
805805

806-
await this.waitTillOnlyOneHeaderPresentWithText('Open for review');
806+
await this.waitTillOnlyOneHeaderPresentWithText('Review Opportunities');
807807
await CommonHelper.waitUntilVisibilityOf(
808808
() =>
809809
CommonHelper.findElementByText(

src/shared/components/challenge-listing/Filters/FiltersPanel/index.jsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import Tooltip from 'components/Tooltip';
3131
import { config, Link } from 'topcoder-react-utils';
3232
import { COMPOSE, PRIORITY } from 'react-css-super-themr';
3333
import { REVIEW_OPPORTUNITY_TYPES } from 'utils/tc';
34+
import { isReviewerOrAdmin } from 'utils/challenge-listing/helper';
3435
import { isFilterEmpty, isPastBucket, BUCKETS } from 'utils/challenge-listing/buckets';
3536
import SwitchWithLabel from 'components/SwitchWithLabel';
3637
import ChallengeSearchBar from 'containers/challenge-listing/ChallengeSearchBar';
@@ -71,6 +72,7 @@ export default function FiltersPanel({
7172
setExpanded,
7273
setSort,
7374
selectBucket,
75+
reviewCount,
7476
}) {
7577
if (hidden && !expanded) {
7678
return (
@@ -382,8 +384,10 @@ export default function FiltersPanel({
382384
disabled={disabled}
383385
expanding={expanding}
384386
isAuth={isAuth}
387+
isReviewer={isReviewerOrAdmin(auth)}
385388
selectBucket={selectBucket}
386389
past={past}
390+
reviewCount={reviewCount}
387391
/>
388392
</div>
389393
</div>
@@ -757,6 +761,7 @@ FiltersPanel.defaultProps = {
757761
onClose: _.noop,
758762
expanding: false,
759763
disabled: false,
764+
reviewCount: 0,
760765
};
761766

762767
FiltersPanel.propTypes = {
@@ -787,4 +792,5 @@ FiltersPanel.propTypes = {
787792
selectBucket: PT.func.isRequired,
788793
expanding: PT.bool,
789794
disabled: PT.bool,
795+
reviewCount: PT.number,
790796
};

src/shared/components/challenge-listing/Listing/ReviewOpportunityBucket/index.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ export default function ReviewOpportunityBucket({
8484
filteredOpportunities
8585
? filteredOpportunities.length > 0 && (
8686
<SortingSelectBar
87-
title="Open for review"
87+
title="Review Opportunities"
8888
options={
8989
BUCKET_DATA[bucket].sorts.map(item => ({
9090
label: Sort[item].name,
@@ -100,7 +100,7 @@ export default function ReviewOpportunityBucket({
100100
)
101101
: (
102102
<SortingSelectBar
103-
title="Open for review"
103+
title="Review Opportunities"
104104
onSelect={setSort}
105105
options={
106106
BUCKET_DATA[bucket].sorts.map(item => ({

src/shared/components/challenge-listing/Listing/index.jsx

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import Bucket from './Bucket';
1515
import ReviewOpportunityBucket from './ReviewOpportunityBucket';
1616
import CardPlaceholder from '../placeholders/ChallengeCard';
1717
import './style.scss';
18+
import { isReviewerOrAdmin } from '../../../utils/challenge-listing/helper';
1819

1920
// const Filter = challengeUtils.filter;
2021
const LOADING_MESSAGE = 'Loading Challenges';
@@ -146,25 +147,33 @@ function Listing({
146147
* and are only shown when explicitly chosen from the sidebar */
147148
isReviewOpportunitiesBucket(bucket)
148149
? (
149-
<ReviewOpportunityBucket
150-
// bucket={buckets[bucket]}
151-
bucket={bucket}
152-
challengesUrl={challengesUrl}
153-
expandedTags={expandedTags}
154-
expandTag={expandTag}
155-
filterState={filterState}
156-
keepPlaceholders={keepPastPlaceholders}
157-
needLoad={needLoad}
158-
loading={loadingReviewOpportunities}
159-
loadMore={loadMoreReviewOpportunities}
160-
opportunities={reviewOpportunities}
161-
setFilterState={setFilterState}
162-
setSort={sort => setSort(bucket, sort)}
163-
sort={sorts[bucket]}
164-
challengeTypes={challengeTypes}
165-
isLoggedIn={isLoggedIn}
166-
setSearchText={setSearchText}
167-
/>
150+
<React.Fragment>
151+
{
152+
isReviewerOrAdmin(auth) ? (
153+
<ReviewOpportunityBucket
154+
// bucket={buckets[bucket]}
155+
bucket={bucket}
156+
challengesUrl={challengesUrl}
157+
expandedTags={expandedTags}
158+
expandTag={expandTag}
159+
filterState={filterState}
160+
keepPlaceholders={keepPastPlaceholders}
161+
needLoad={needLoad}
162+
loading={loadingReviewOpportunities}
163+
loadMore={loadMoreReviewOpportunities}
164+
opportunities={reviewOpportunities}
165+
setFilterState={setFilterState}
166+
setSort={sort => setSort(bucket, sort)}
167+
sort={sorts[bucket]}
168+
challengeTypes={challengeTypes}
169+
isLoggedIn={isLoggedIn}
170+
setSearchText={setSearchText}
171+
/>
172+
) : (
173+
<div styleName="no-results">You have no access to review page.</div>
174+
)
175+
}
176+
</React.Fragment>
168177
)
169178
: (
170179
<Bucket

src/shared/components/challenge-listing/Sidebar/BucketSelector/Bucket/index.jsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ function Bucket({
1818
// challenges,
1919
disabled,
2020
onClick,
21+
reviewCount,
2122
// allActiveChallengesLoaded,
2223
meta,
24+
loading,
2325
}) {
2426
// let countEl;
2527
// if (!disabled) { // !bucket.hideCount &&
@@ -51,6 +53,9 @@ function Bucket({
5153
case BUCKETS.MY_PAST:
5254
count = meta.myPastChallengesCount;
5355
break;
56+
case BUCKETS.REVIEW_OPPORTUNITIES:
57+
count = reviewCount;
58+
break;
5459
default:
5560
}
5661
// }
@@ -90,7 +95,8 @@ function Bucket({
9095
}}
9196
/>
9297
<span styleName="bucketName">{BUCKET_DATA[bucket].name}</span>
93-
{(bucket !== BUCKETS.ALL && count > 0) ? <span styleName="count">{count}</span> : null}
98+
{(bucket !== BUCKETS.ALL && bucket !== BUCKETS.REVIEW_OPPORTUNITIES && count > 0 && !loading) ? <span styleName="count">{count}</span> : null}
99+
{(bucket === BUCKETS.REVIEW_OPPORTUNITIES && count > 0) ? <span styleName="count">{count}</span> : null}
94100
</div>
95101
);
96102
}
@@ -100,6 +106,8 @@ Bucket.defaultProps = {
100106
disabled: false,
101107
onClick: _.noop,
102108
meta: {},
109+
reviewCount: 0,
110+
loading: true,
103111
};
104112

105113
Bucket.propTypes = {
@@ -116,6 +124,8 @@ Bucket.propTypes = {
116124
onClick: PT.func,
117125
meta: PT.shape(),
118126
// allActiveChallengesLoaded: PT.bool.isRequired,
127+
loading: PT.bool,
128+
reviewCount: PT.number,
119129
};
120130

121131
const mapStateToProps = (state) => {

src/shared/components/challenge-listing/Sidebar/BucketSelector/Bucket/style.scss

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252

5353
font-weight: 400;
5454
font-size: 16px;
55-
line-height: 24px;
55+
line-height: 26px;
5656
color: $tco-black;
5757
margin-left: 5px;
5858
}
@@ -74,7 +74,7 @@
7474
text-align: center;
7575
padding: 0 8px;
7676
margin-left: 8px;
77-
margin-bottom: 5px;
77+
margin-bottom: 8px;
7878
}
7979
}
8080

src/shared/components/challenge-listing/Sidebar/BucketSelector/index.jsx

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import PT from 'prop-types';
88
import React from 'react';
99
import { BUCKETS } from 'utils/challenge-listing/buckets';
10+
import { isReviewerOrAdmin } from 'utils/challenge-listing/helper';
1011
// import { challenge as challengeUtils } from 'topcoder-react-lib';
1112

1213
import Bucket from './Bucket';
@@ -29,11 +30,15 @@ export default function BucketSelector({
2930
// extraBucket,
3031
// filterState,
3132
isAuth,
33+
// isReviewer,
3234
// savedFilters,
3335
selectBucket,
3436
// selectSavedFilter,
3537
// setEditSavedFiltersMode,
3638
past,
39+
auth,
40+
reviewCount,
41+
loading,
3742
}) {
3843
// let filteredChallenges = challenges.filter(Filter.getFilterFunction(filterState));
3944

@@ -49,6 +54,7 @@ export default function BucketSelector({
4954
<Bucket
5055
active={!disabled && isActive}
5156
bucket={bucket}
57+
reviewCount={reviewCount}
5258
// challenges={challenges}
5359
disabled={disabled}
5460
onClick={() => {
@@ -57,6 +63,7 @@ export default function BucketSelector({
5763
document.body.scrollTop = 0;
5864
document.documentElement.scrollTop = 0;
5965
}}
66+
loading={loading}
6067
/>
6168
);
6269
};
@@ -89,7 +96,7 @@ export default function BucketSelector({
8996
{getBucket(BUCKETS.OPEN_FOR_REGISTRATION)}
9097
{/* DISABLED: Until api receive fix community-app#5073 */}
9198
{/* {getBucket(BUCKETS.ONGOING)} */}
92-
{getBucket(BUCKETS.REVIEW_OPPORTUNITIES)}
99+
{isReviewerOrAdmin(auth) ? getBucket(BUCKETS.REVIEW_OPPORTUNITIES) : null}
93100
{/* {getBucket(BUCKETS.PAST)} */}
94101
{/* NOTE: We do not show upcoming challenges for now, for various reasons,
95102
* more political than technical ;)
@@ -140,11 +147,19 @@ BucketSelector.defaultProps = {
140147
disabled: false,
141148
// extraBucket: null,
142149
isAuth: false,
150+
// isReviewer: false,
143151
expanding: false,
144152
past: false,
153+
reviewCount: 0,
154+
loading: true,
145155
};
146156

147157
BucketSelector.propTypes = {
158+
auth: PT.shape({
159+
profile: PT.shape(),
160+
tokenV3: PT.string,
161+
user: PT.shape(),
162+
}).isRequired,
148163
activeBucket: PT.string.isRequired,
149164
expanding: PT.bool,
150165
// activeSavedFilter: PT.number.isRequired,
@@ -156,9 +171,12 @@ BucketSelector.propTypes = {
156171
// extraBucket: PT.string,
157172
// filterState: PT.shape().isRequired,
158173
isAuth: PT.bool,
174+
// isReviewer: PT.bool,
159175
// savedFilters: PT.arrayOf(PT.shape()).isRequired,
160176
selectBucket: PT.func.isRequired,
177+
reviewCount: PT.number,
161178
// selectSavedFilter: PT.func.isRequired,
162179
// setEditSavedFiltersMode: PT.func.isRequired,
163180
past: PT.bool,
181+
loading: PT.bool,
164182
};

0 commit comments

Comments
 (0)