Skip to content

Commit 5fd8075

Browse files
authored
Merge pull request #5254 from nqviet/filter-update-fix-issue-5068
Filter update -- fix issue 5068's comments
2 parents c91c817 + 5a62e30 commit 5fd8075

File tree

21 files changed

+163
-163
lines changed

21 files changed

+163
-163
lines changed

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

+1-25
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,6 @@ exports[`Matches shallow shapshot 1 shapshot 1 1`] = `
2424
setFilterState={[MockFunction]}
2525
/>
2626
</div>
27-
<div
28-
className="src-shared-components-challenge-listing-___style__sidebar-container-desktop___h0bz6"
29-
>
30-
<Connect(SidebarContainer)
31-
expanding={false}
32-
/>
33-
<Connect(Container)
34-
communityName={null}
35-
isAuth={false}
36-
setFilterState={[MockFunction]}
37-
/>
38-
</div>
3927
<Connect(Listing)
4028
activeBucket="abc"
4129
auth={Object {}}
@@ -79,19 +67,6 @@ exports[`Matches shallow shapshot 2 shapshot 2 1`] = `
7967
<div
8068
className="src-shared-components-challenge-listing-___style__tc-content-wrapper___1MqlF"
8169
>
82-
<div
83-
className="src-shared-components-challenge-listing-___style__sidebar-container-mobile___3e65d"
84-
>
85-
<Connect(SidebarContainer)
86-
expanding={false}
87-
/>
88-
<Connect(Container)
89-
communityName={null}
90-
hidden={true}
91-
isAuth={false}
92-
setFilterState={[MockFunction]}
93-
/>
94-
</div>
9570
<div
9671
className="src-shared-components-challenge-listing-___style__sidebar-container-desktop___h0bz6"
9772
>
@@ -100,6 +75,7 @@ exports[`Matches shallow shapshot 2 shapshot 2 1`] = `
10075
/>
10176
<Connect(Container)
10277
communityName={null}
78+
hidden={false}
10379
isAuth={false}
10480
setFilterState={[MockFunction]}
10581
/>

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

+3
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ describe('Matches shallow shapshot 1', () => {
4343
describe('Matches shallow shapshot 2', () => {
4444
beforeEach(() => {
4545
jest.resetModules();
46+
jest.mock('react-responsive', () => ({
47+
useMediaQuery: () => true,
48+
}));
4649
ChallengeListing = require('components/challenge-listing').default;
4750
});
4851

__tests__/shared/reducers/challenge-listing/sidebar.js

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ const defaultReducer = require('reducers/challenge-listing/sidebar').default;
22

33
const expectedState = {
44
activeBucket: 'openForRegistration',
5-
past: false,
65
};
76

87
function testReducer(reducer) {

src/shared/actions/challenge-listing/sidebar.js

-2
Original file line numberDiff line numberDiff line change
@@ -153,8 +153,6 @@ export default createActions({
153153

154154
// UPDATE_ALL_SAVED_FILTERS: updateAllSavedFilters,
155155
// UPDATE_SAVED_FILTER: updateSavedFilter,
156-
157-
SET_PAST: isPast => ({ past: isPast }),
158156
},
159157
},
160158
});

src/shared/components/DateRangePicker/index.jsx

+9
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,15 @@ function DateRangePicker(props) {
466466
>
467467
Reset
468468
</button>
469+
<button
470+
type="button"
471+
styleName="close-button"
472+
onClick={() => {
473+
setIsComponentVisible(false);
474+
}}
475+
>
476+
&times;
477+
</button>
469478
</div>
470479
)
471480
}

src/shared/components/DateRangePicker/style.scss

+18
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,24 @@
392392
margin: 20px 12px 0;
393393
}
394394
}
395+
396+
.close-button {
397+
position: absolute;
398+
top: 0;
399+
right: 0;
400+
display: none;
401+
line-height: 16px;
402+
padding: 15px;
403+
font-size: 36px;
404+
color: $tc-black;
405+
appearance: none;
406+
background: none;
407+
border: 0;
408+
409+
@include phone {
410+
display: block;
411+
}
412+
}
395413
}
396414

397415
.endDate {

src/shared/components/challenge-detail/Header/ChallengeTags.jsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,9 @@ export default function ChallengeTags(props) {
8888
&& (
8989
<Tag
9090
key={tag}
91-
onClick={() => setImmediate(() => setChallengeListingFilter({ tags: [tag] }))
91+
onClick={() => setImmediate(() => setChallengeListingFilter({ search: tag }))
9292
}
93-
to={`${challengesUrl}?tags[]=${
93+
to={`${challengesUrl}?search=${
9494
encodeURIComponent(tag)}`}
9595
>
9696
{tag}

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

+48-45
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import Tooltip from 'components/Tooltip';
3232
import { config, Link } from 'topcoder-react-utils';
3333
import { COMPOSE, PRIORITY } from 'react-css-super-themr';
3434
import { REVIEW_OPPORTUNITY_TYPES } from 'utils/tc';
35-
import { isFilterEmpty } from 'utils/challenge-listing/buckets';
35+
import { isFilterEmpty, isPastBucket } from 'utils/challenge-listing/buckets';
3636
import SwitchWithLabel from 'components/SwitchWithLabel';
3737
import { challenge as challengeUtils } from 'topcoder-react-lib';
3838
import { createStaticRanges } from 'utils/challenge-listing/date-range';
@@ -64,7 +64,6 @@ export default function FiltersPanel({
6464
// isSavingFilter,
6565
expanded,
6666
setExpanded,
67-
past,
6867
}) {
6968
if (hidden && !expanded) {
7069
return (
@@ -226,8 +225,6 @@ export default function FiltersPanel({
226225
data: getLabel(community),
227226
}));
228227

229-
const disableClearFilterButtons = isFilterEmpty(filterState, past ? 'past' : '', activeBucket);
230-
231228
// const mapOps = item => ({ label: item, value: item });
232229
const mapTypes = item => ({ label: item.name, value: item.abbreviation });
233230
const getCommunityOption = () => {
@@ -249,6 +246,8 @@ export default function FiltersPanel({
249246
};
250247

251248
const staticRanges = createStaticRanges();
249+
const past = isPastBucket(activeBucket);
250+
const disableClearFilterButtons = isFilterEmpty(filterState, past ? 'past' : '', activeBucket);
252251

253252
return (
254253
<div styleName="FiltersPanel">
@@ -495,47 +494,52 @@ export default function FiltersPanel({
495494
) : null
496495
}
497496

498-
<div styleName="filter-row">
499-
<div styleName="filter filter community">
500-
<label htmlFor="community-select" styleName="label">
501-
Sub community
502-
<input type="hidden" />
503-
</label>
504-
<Select
505-
autoBlur
506-
clearable={false}
507-
id="community-select"
508-
// onChange={selectCommunity}
509-
onChange={(value) => {
510-
if (value && value.startsWith('event_')) {
511-
const event = value.split('_')[1];
512-
setFilterState({
513-
..._.clone(filterState),
514-
events: event === '' ? [] : [event],
515-
groups: [],
516-
});
517-
} else {
518-
const group = value;
519-
setFilterState({
520-
..._.clone(filterState),
521-
groups: group === '' ? [] : [group],
522-
events: [],
523-
});
524-
}
525-
// setFilterState({ ..._.clone(filterState), groups: [value] });
526-
}}
527-
options={communityOps}
528-
simpleValue
529-
value={getCommunityOption()}
530-
valueRenderer={option => (
531-
<span styleName="active-community">
532-
{option.name}
533-
</span>
534-
)}
535-
/>
536-
</div>
537-
</div>
497+
{ !isReviewOpportunitiesBucket
498+
&& (
499+
<div styleName="filter-row">
500+
<div styleName="filter filter community">
501+
<label htmlFor="community-select" styleName="label">
502+
Sub community
503+
<input type="hidden" />
504+
</label>
505+
<Select
506+
autoBlur
507+
clearable={false}
508+
id="community-select"
509+
// onChange={selectCommunity}
510+
onChange={(value) => {
511+
if (value && value.startsWith('event_')) {
512+
const event = value.split('_')[1];
513+
setFilterState({
514+
..._.clone(filterState),
515+
events: event === '' ? [] : [event],
516+
groups: [],
517+
});
518+
} else {
519+
const group = value;
520+
setFilterState({
521+
..._.clone(filterState),
522+
groups: group === '' ? [] : [group],
523+
events: [],
524+
});
525+
}
526+
// setFilterState({ ..._.clone(filterState), groups: [value] });
527+
}}
528+
options={communityOps}
529+
simpleValue
530+
value={getCommunityOption()}
531+
valueRenderer={option => (
532+
<span styleName="active-community">
533+
{option.name}
534+
</span>
535+
)}
536+
/>
537+
</div>
538+
</div>
539+
)
540+
}
538541
</div>
542+
539543
<div styleName="buttons">
540544
<Button
541545
composeContextTheme={COMPOSE.SOFT}
@@ -607,5 +611,4 @@ FiltersPanel.propTypes = {
607611
onClose: PT.func,
608612
expanded: PT.bool.isRequired,
609613
setExpanded: PT.func.isRequired,
610-
past: PT.bool.isRequired,
611614
};

src/shared/components/challenge-listing/Filters/FiltersPanel/style.scss

+2-2
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,8 @@
119119
display: block;
120120
color: $tc-black;
121121
font-size: 11px;
122-
line-height: 13px;
123-
margin-bottom: 4px;
122+
line-height: 15px;
123+
margin-bottom: 8px;
124124
}
125125

126126
@include xs-to-md {

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

+10-1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ export default function Bucket({
4949
activeBucket,
5050
// searchTimestamp,
5151
isLoggedIn,
52+
setSearchText,
5253
}) {
5354
const refs = useRef([]);
5455
refs.current = [];
@@ -125,7 +126,14 @@ export default function Bucket({
125126
challengeType={_.find(challengeTypes, { name: challenge.type })}
126127
challengesUrl={challengesUrl}
127128
newChallengeDetails={newChallengeDetails}
128-
onTechTagClicked={tag => setFilterState({ ..._.clone(filterState), tags: [tag], types: [] })}
129+
onTechTagClicked={(tag) => {
130+
setFilterState({
131+
..._.clone(filterState),
132+
search: tag,
133+
types: challengeTypes.map(type => type.abbreviation),
134+
});
135+
setSearchText(tag);
136+
}}
129137
openChallengesInNewTabs={openChallengesInNewTabs}
130138
prizeMode={prizeMode}
131139
key={challenge.id}
@@ -250,4 +258,5 @@ Bucket.propTypes = {
250258
activeBucket: PT.string,
251259
// searchTimestamp: PT.number,
252260
isLoggedIn: PT.bool.isRequired,
261+
setSearchText: PT.func.isRequired,
253262
};

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

+6-1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ export default function ReviewOpportunityBucket({
3333
setSort,
3434
challengeTypes,
3535
sort,
36+
setSearchText,
3637
}) {
3738
if (!opportunities.length && !loadMore) return null;
3839

@@ -59,7 +60,10 @@ export default function ReviewOpportunityBucket({
5960
challengeType={_.find(challengeTypes, { name: item.challenge.type }) || {}}
6061
expandedTags={expandedTags}
6162
expandTag={expandTag}
62-
onTechTagClicked={tag => setFilterState({ tags: [tag] })}
63+
onTechTagClicked={(tag) => {
64+
setFilterState({ search: tag });
65+
setSearchText(tag);
66+
}}
6367
opportunity={item}
6468
key={item.id}
6569
/>
@@ -132,4 +136,5 @@ ReviewOpportunityBucket.propTypes = {
132136
setSort: PT.func.isRequired,
133137
sort: PT.string,
134138
challengeTypes: PT.arrayOf(PT.shape()).isRequired,
139+
setSearchText: PT.func.isRequired,
135140
};

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

+4
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ function Listing({
7171
// pastSearchTimestamp,
7272
isLoggedIn,
7373
meta,
74+
setSearchText,
7475
}) {
7576
// const buckets = getBuckets(userChallenges);
7677
// const isChallengesAvailable = (bucket) => {
@@ -159,6 +160,7 @@ function Listing({
159160
sort={sorts[bucket]}
160161
challengeTypes={challengeTypes}
161162
isLoggedIn={isLoggedIn}
163+
setSearchText={setSearchText}
162164
/>
163165
)
164166
: (
@@ -194,6 +196,7 @@ function Listing({
194196
activeBucket={activeBucket}
195197
// searchTimestamp={searchTimestamp}
196198
isLoggedIn={isLoggedIn}
199+
setSearchText={setSearchText}
197200
/>
198201
)
199202
);
@@ -348,6 +351,7 @@ Listing.propTypes = {
348351
// userChallenges: PT.arrayOf(PT.string),
349352
isLoggedIn: PT.bool.isRequired,
350353
meta: PT.shape().isRequired,
354+
setSearchText: PT.func.isRequired,
351355
};
352356

353357
const mapStateToProps = (state) => {

0 commit comments

Comments
 (0)