Skip to content

Commit b76dbae

Browse files
committed
add animation on select bucket
1 parent 8a64069 commit b76dbae

File tree

5 files changed

+38
-3
lines changed

5 files changed

+38
-3
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,20 +169,23 @@ function testReducer(reducer) {
169169
expectedState = {
170170
...expectedState,
171171
activeBucket: 'all',
172+
isBucketSwitching: true,
172173
};
173174
expect(state).toEqual(expectedState);
174175

175176
state = reducer(state, mockActions.selectBucket('saved-filter')());
176177
expectedState = {
177178
...expectedState,
178179
activeBucket: 'saved-filter',
180+
isBucketSwitching: true,
179181
};
180182
expect(state).toEqual(expectedState);
181183

182184
state = reducer(state, mockActions.selectBucket('upcoming')());
183185
expectedState = {
184186
...expectedState,
185187
activeBucket: 'upcoming',
188+
isBucketSwitching: true,
186189
};
187190
expect(state).toEqual(expectedState);
188191
});
@@ -193,6 +196,7 @@ function testReducer(reducer) {
193196
...expectedState,
194197
activeBucket: 'saved-filter',
195198
activeSavedFilter: 1,
199+
isBucketSwitching: true,
196200
};
197201
expect(state).toEqual(expectedState);
198202
});

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ export default createActions({
143143

144144
/* Pass in the bucket type. */
145145
SELECT_BUCKET: _.identity,
146+
SELECT_BUCKET_DONE: _.noop,
146147

147148
/* Pass in the index of filter inside savedFilters array. */
148149
SELECT_SAVED_FILTER: _.identity,

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export default function ChallengeListing(props) {
3939
keepPastPlaceholders,
4040
loadingChallenges,
4141
preListingMsg,
42+
isBucketSwitching,
4243
} = props;
4344

4445
let { challenges } = props;
@@ -70,8 +71,11 @@ export default function ChallengeListing(props) {
7071
}
7172

7273
let challengeCardContainer;
73-
if (!expanded && loadingChallenges && !suppressPlaceholders
74-
&& !isReviewOpportunitiesBucket(activeBucket)) { // Skip, Review Opps are not auto-refreshed
74+
if ((!expanded
75+
&& loadingChallenges
76+
&& !suppressPlaceholders
77+
&& !isReviewOpportunitiesBucket(activeBucket))
78+
|| isBucketSwitching) { // Skip, Review Opps are not auto-refreshed
7579
const challengeCards = _.range(CHALLENGE_PLACEHOLDER_COUNT)
7680
.map(key => <ChallengeCardPlaceholder id={key} key={key} />);
7781
challengeCardContainer = (
@@ -195,6 +199,7 @@ ChallengeListing.defaultProps = {
195199
expandedTags: [],
196200
expandTag: null,
197201
loadMoreActive: null,
202+
isBucketSwitching: false,
198203
};
199204

200205
ChallengeListing.propTypes = {
@@ -230,4 +235,5 @@ ChallengeListing.propTypes = {
230235
sorts: PT.shape().isRequired,
231236
auth: PT.shape(),
232237
loadMoreActive: PT.func,
238+
isBucketSwitching: PT.bool,
233239
};

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ export class ListingContainer extends React.Component {
8383
getRestActiveChallenges,
8484
meta,
8585
loadingActiveChallengesUUID,
86+
selectBucketDone,
8687
} = this.props;
8788
const oldUserId = _.get(prevProps, 'auth.user.userId');
8889
const userId = _.get(this.props, 'auth.user.userId');
@@ -104,6 +105,10 @@ export class ListingContainer extends React.Component {
104105
&& BUCKETS.PAST !== activeBucket) {
105106
getRestActiveChallenges(auth.tokenV3);
106107
}
108+
109+
setTimeout(() => {
110+
selectBucketDone();
111+
}, 10);
107112
}
108113

109114
componentWillUnmount() {
@@ -198,6 +203,7 @@ export class ListingContainer extends React.Component {
198203
setSort,
199204
sorts,
200205
hideTcLinksInSidebarFooter,
206+
isBucketSwitching,
201207
} = this.props;
202208

203209
const { tokenV3 } = auth;
@@ -298,6 +304,7 @@ export class ListingContainer extends React.Component {
298304
sorts={sorts}
299305
groupIds={groupIds}
300306
auth={auth}
307+
isBucketSwitching={isBucketSwitching}
301308
/>
302309
</div>
303310
);
@@ -323,6 +330,7 @@ ListingContainer.defaultProps = {
323330
prizeMode: 'money-usd',
324331
queryBucket: BUCKETS.ALL,
325332
meta: {},
333+
isBucketSwitching: false,
326334
};
327335

328336
ListingContainer.propTypes = {
@@ -391,6 +399,8 @@ ListingContainer.propTypes = {
391399
expandTag: PT.func.isRequired,
392400
queryBucket: PT.string,
393401
meta: PT.shape(),
402+
isBucketSwitching: PT.bool,
403+
selectBucketDone: PT.func.isRequired,
394404
};
395405

396406
const mapStateToProps = (state, ownProps) => {
@@ -432,6 +442,7 @@ const mapStateToProps = (state, ownProps) => {
432442
selectedCommunityId: cl.selectedCommunityId,
433443
sorts: cl.sorts,
434444
activeBucket: cl.sidebar.activeBucket,
445+
isBucketSwitching: cl.sidebar.isBucketSwitching,
435446
expandedTags: cl.expandedTags,
436447
meta: cl.meta,
437448
};
@@ -471,6 +482,7 @@ function mapDispatchToProps(dispatch) {
471482
dispatch(a.getReviewOpportunitiesDone(uuid, page, token));
472483
},
473484
selectBucket: bucket => dispatch(sa.selectBucket(bucket)),
485+
selectBucketDone: () => dispatch(sa.selectBucketDone()),
474486
selectChallengeDetailsTab:
475487
tab => dispatch(challengeDetailsActions.page.challengeDetails.selectTab(tab)),
476488
selectCommunity: id => dispatch(a.selectCommunity(id)),

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,18 @@ function onSelectBucket(state, { payload }) {
129129
updateQuery({ bucket: payload });
130130
break;
131131
}
132-
return { ...state, activeBucket: payload };
132+
return {
133+
...state,
134+
activeBucket: payload,
135+
isBucketSwitching: true,
136+
};
137+
}
138+
139+
function onSelectBucketDone(state) {
140+
return {
141+
...state,
142+
isBucketSwitching: false,
143+
};
133144
}
134145

135146
function onSelectSavedFilter(state, { payload }) {
@@ -181,6 +192,7 @@ function create(initialState = {}) {
181192
isSavingFilter: true,
182193
}),
183194
[a.selectBucket]: onSelectBucket,
195+
[a.selectBucketDone]: onSelectBucketDone,
184196
[a.selectSavedFilter]: onSelectSavedFilter,
185197
[a.setEditSavedFiltersMode]: (state, { payload }) => ({
186198
...state,

0 commit comments

Comments
 (0)