From 1207ca7f56fc3565848f7bb589b9883920a2fdab Mon Sep 17 00:00:00 2001 From: "Dr. Sergey Pogodin" Date: Thu, 15 Jun 2017 17:18:30 +0200 Subject: [PATCH 1/2] Fix: Wipro logo got missed in the Wipro community header --- src/assets/themes/wipro/wipro-logo.png | Bin 0 -> 6923 bytes src/server/tc-communities/wipro/metadata.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 src/assets/themes/wipro/wipro-logo.png diff --git a/src/assets/themes/wipro/wipro-logo.png b/src/assets/themes/wipro/wipro-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5ac77dd121e03ac436dbdee53b33c761517c36c9 GIT binary patch literal 6923 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 R`c?n{002ovPDHLkV1jDEJZ%5~ literal 0 HcmV?d00001 diff --git a/src/server/tc-communities/wipro/metadata.json b/src/server/tc-communities/wipro/metadata.json index 5ec5bd10d0..a47bb864f1 100644 --- a/src/server/tc-communities/wipro/metadata.json +++ b/src/server/tc-communities/wipro/metadata.json @@ -20,7 +20,7 @@ }], "leaderboardApiUrl": "https://api.topcoder.com/v4/looks/0/run/json/", "logos": [ - "https://upload.wikimedia.org/wikipedia/commons/thumb/0/0e/Wipro_Logo_RGB.png/480px-Wipro_Logo_RGB.png", + "/themes/wipro/wipro-logo.png", "/themes/wipro/logo_topcoder_with_name.svg" ], "menuItems": [ From b2bb7b461907b837063ff3fbdf297f253d4a7787 Mon Sep 17 00:00:00 2001 From: "Dr. Sergey Pogodin" Date: Thu, 15 Jun 2017 18:04:27 +0200 Subject: [PATCH 2/2] Adds confirm modal to Join Community button --- src/shared/actions/tc-communities/index.js | 2 + .../tc-communities/JoinCommunity/index.jsx | 55 +++++++++++++++---- .../tc-communities/JoinCommunity/style.scss | 53 ++++++++++++++++++ .../tc-communities/JoinCommunity.js | 13 +++-- src/shared/reducers/tc-communities/index.js | 23 +++++--- 5 files changed, 123 insertions(+), 23 deletions(-) diff --git a/src/shared/actions/tc-communities/index.js b/src/shared/actions/tc-communities/index.js index a8398c22bb..b5937a3b39 100644 --- a/src/shared/actions/tc-communities/index.js +++ b/src/shared/actions/tc-communities/index.js @@ -18,5 +18,7 @@ export default createActions({ HIDE_JOIN_BUTTON: _.noop, JOIN_INIT: _.noop, JOIN_DONE: joinDone, + RESET_JOIN_BUTTON: _.noop, + SHOW_JOIN_CONFIRM_MODAL: _.noop, }, }); diff --git a/src/shared/components/tc-communities/JoinCommunity/index.jsx b/src/shared/components/tc-communities/JoinCommunity/index.jsx index fd673c7883..bbf2a60c08 100644 --- a/src/shared/components/tc-communities/JoinCommunity/index.jsx +++ b/src/shared/components/tc-communities/JoinCommunity/index.jsx @@ -7,6 +7,7 @@ /* global window */ +import _ from 'lodash'; import config from 'utils/config'; import LoadingIndicator from 'components/LoadingIndicator'; import Modal from 'components/Modal'; @@ -14,24 +15,37 @@ import PT from 'prop-types'; import React from 'react'; import style from './style.scss'; +export const STATE = { + CONFIRM_JOIN: 'confirm-join', + DEFAULT: 'default', + HIDDEN: 'hidden', + JOINED: 'joined', + JOINING: 'joining', +}; + export default function JoinCommunity({ - canJoin, communityName, groupId, hideJoinButton, join, - joined, - joining, + resetJoinButton, + showJoinConfirmModal, + state, token, userId, }) { - if (!canJoin) return
; + if (state === STATE.HIDDEN) return
; return (
- { joined ? ( + { state === STATE.JOINED ? (

Congratulations!

You have joined {communityName}!

@@ -58,6 +72,23 @@ export default function JoinCommunity({ >Return to the Community
) : null} + { state === STATE.CONFIRM_JOIN ? ( + +

+ Are you sure you want to join {communityName}? +

+
+ + +
+
+ ) : null}
); } @@ -69,13 +100,13 @@ JoinCommunity.defaultProps = { }; JoinCommunity.propTypes = { - canJoin: PT.bool.isRequired, communityName: PT.string.isRequired, groupId: PT.string, hideJoinButton: PT.func.isRequired, join: PT.func.isRequired, - joined: PT.bool.isRequired, - joining: PT.bool.isRequired, + resetJoinButton: PT.func.isRequired, + showJoinConfirmModal: PT.func.isRequired, + state: PT.oneOf(_.values(STATE)).isRequired, token: PT.string, userId: PT.string, }; diff --git a/src/shared/components/tc-communities/JoinCommunity/style.scss b/src/shared/components/tc-communities/JoinCommunity/style.scss index e408697637..00cd7a08b9 100644 --- a/src/shared/components/tc-communities/JoinCommunity/style.scss +++ b/src/shared/components/tc-communities/JoinCommunity/style.scss @@ -1,5 +1,58 @@ @import "~styles/tc-styles"; +@mixin button($color, $highlight-color) { + color: $color; + display: block; + background: $tc-white; + border: 1px solid $color; + border-radius: 20px; + font: 700 14px/40px 'Open Sans'; + margin: 24px auto; + height: 40px; + text-align: center; + text-transform: uppercase; + width: 171px; + + &:hover, + &:active, + &:focus, + &:visited { + color: $color; + outline: none; + text-decoration: none; + } + + &:hover { + background: $highlight-color; + } +} + +.confirmMsg { + @include tc-body; + + text-align: center; +} + +.btnCancel { + @include button($tc-light-blue, $tc-light-blue-10); + + display: inline-block; + margin: 24px 0 0 12px; + width: 100px; +} + +.btnConfirm { + @include button($tc-green, $tc-green-10); + + display: inline-block; + margin: 24px 12px 0 0; + width: 100px; +} + +.buttons { + text-align: center; +} + .done { color: $tc-light-blue; display: block; diff --git a/src/shared/containers/tc-communities/JoinCommunity.js b/src/shared/containers/tc-communities/JoinCommunity.js index ec03a10312..f0facb02b0 100644 --- a/src/shared/containers/tc-communities/JoinCommunity.js +++ b/src/shared/containers/tc-communities/JoinCommunity.js @@ -1,6 +1,8 @@ import _ from 'lodash'; import actions from 'actions/tc-communities'; -import JoinCommunity from 'components/tc-communities/JoinCommunity'; +import JoinCommunity, { + STATE as JOIN_COMMUNITY, +} from 'components/tc-communities/JoinCommunity'; import { connect } from 'react-redux'; function mapStateToProps(state) { @@ -11,13 +13,14 @@ function mapStateToProps(state) { item.id === state.tcCommunities.meta.challengeGroupId); if (state.tcCommunities.hideJoinButton) canJoin = false; + if (canJoin) canJoin = state.tcCommunities.joinCommunityButton; + else canJoin = JOIN_COMMUNITY.HIDDEN; + return { - canJoin, communityName: state.tcCommunities.meta.communityName, groupId: state.tcCommunities.meta.challengeGroupId, - joined: state.tcCommunities.joined, - joining: state.tcCommunities.joining, token: state.auth.tokenV3, + state: canJoin, userId: _.get(state.auth.user, 'userId'), }; } @@ -30,6 +33,8 @@ function mapDispatchToProps(dispatch) { dispatch(a.joinInit()); dispatch(a.joinDone(...args)); }, + resetJoinButton: () => dispatch(a.resetJoinButton()), + showJoinConfirmModal: () => dispatch(a.showJoinConfirmModal()), }; } diff --git a/src/shared/reducers/tc-communities/index.js b/src/shared/reducers/tc-communities/index.js index 931a9b6c13..994e112b79 100644 --- a/src/shared/reducers/tc-communities/index.js +++ b/src/shared/reducers/tc-communities/index.js @@ -9,6 +9,7 @@ import actions from 'actions/tc-communities'; import logger from 'utils/logger'; import { handleActions } from 'redux-actions'; import { combine, resolveReducers } from 'utils/redux'; +import { STATE as JOIN_COMMUNITY } from 'components/tc-communities/JoinCommunity'; import { factory as metaFactory } from './meta'; import { factory as newsFactory } from './news'; @@ -22,21 +23,29 @@ function onJoinDone(state, action) { * to see it normally. */ alert('Failed to join the group!'); // eslint-disable-line no-alert - return { ...state, joined: false, joining: false }; + return { ...state, joinCommunityButton: JOIN_COMMUNITY.DEFAULT }; } - return { ...state, joined: true }; + return { ...state, joinCommunityButton: JOIN_COMMUNITY.JOINED }; } function create(initialState = {}) { const a = actions.tcCommunity; return handleActions({ - [a.hideJoinButton]: state => ({ ...state, hideJoinButton: true }), - [a.joinInit]: state => ({ ...state, joining: true }), + [a.hideJoinButton]: state => ({ + ...state, joinCommunityButton: JOIN_COMMUNITY.HIDDEN, + }), + [a.joinInit]: state => ({ + ...state, joinCommunityButton: JOIN_COMMUNITY.JOINING, + }), [a.joinDone]: onJoinDone, + [a.resetJoinButton]: state => ({ + ...state, joinCommunityButton: JOIN_COMMUNITY.DEFAULT, + }), + [a.showJoinConfirmModal]: state => ({ + ...state, joinCommunityButton: JOIN_COMMUNITY.CONFIRM_JOIN, + }), }, _.defaults(_.clone(initialState), { - hideJoinButton: false, - joined: false, - joining: false, + joinCommunityButton: JOIN_COMMUNITY.DEFAULT, })); }