Skip to content

Commit 222ce86

Browse files
committed
Fixes for #5341
1 parent fa14294 commit 222ce86

File tree

6 files changed

+59
-2
lines changed

6 files changed

+59
-2
lines changed

src/shared/actions/newsletterPreferences.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ async function fetchDataDone(emailHash, listId = config.NEWSLETTER_SIGNUP.DEFAUL
3636
return {
3737
email: emailHash,
3838
preferences: subs.interests,
39+
status: subs.status,
3940
error,
4041
};
4142
} catch (error) {

src/shared/components/Settings/Preferences/Email/index.jsx

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { debounce, map } from 'lodash';
55
import React from 'react';
66
import PT from 'prop-types';
77
import { toastr } from 'react-redux-toastr';
8+
import { PrimaryButton } from 'topcoder-react-ui-kit';
89

910
import ToggleableItem from 'components/Settings/ToggleableItem';
1011

@@ -79,6 +80,7 @@ export default class EmailPreferences extends React.Component {
7980
super(props);
8081
this.state = {
8182
emailPreferences: { ...props.preferences },
83+
status: props.status,
8284
};
8385
this.onChange = this.onChange.bind(this);
8486
}
@@ -107,12 +109,28 @@ export default class EmailPreferences extends React.Component {
107109
}
108110

109111
render() {
110-
const { emailPreferences } = this.state;
112+
const { emailPreferences, status } = this.state;
111113
return (
112114
<div styleName="EmailPreferences">
113115
<h1 styleName="title">
114116
E-Mail Preferences
115117
</h1>
118+
{
119+
status !== 'subscribed' ? (
120+
<div styleName="unsubscribed-msg">
121+
<h3>You have unsubscribed from Topcoder Emails</h3>
122+
<p>If this was a mistake or if you would like to resubscribe,
123+
please click the button below and fill out the form.
124+
</p>
125+
<PrimaryButton
126+
// eslint-disable-next-line no-return-assign
127+
onClick={() => window.location.href = 'https://topcoder.us13.list-manage.com/subscribe?u=65bd5a1857b73643aad556093&id=28bfd3c062'}
128+
>
129+
Resubscribe
130+
</PrimaryButton>
131+
</div>
132+
) : null
133+
}
116134
<div styleName="sub-title">Newsletters</div>
117135
<div styleName="preferences-container">
118136
{
@@ -127,6 +145,7 @@ export default class EmailPreferences extends React.Component {
127145
primaryText={newsletter.name}
128146
secondaryText={newsletter.desc}
129147
onToggle={e => this.onChange(newsletter.id, e.target.checked)}
148+
disabled={status !== 'subscribed'}
130149
/>
131150
);
132151
})
@@ -146,6 +165,7 @@ export default class EmailPreferences extends React.Component {
146165
primaryText={program.name}
147166
secondaryText={program.desc}
148167
onToggle={e => this.onChange(program.id, e.target.checked)}
168+
disabled={status !== 'subscribed'}
149169
/>
150170
);
151171
})
@@ -158,11 +178,13 @@ export default class EmailPreferences extends React.Component {
158178

159179
EmailPreferences.defaultProps = {
160180
updated: null,
181+
status: null,
161182
};
162183

163184
EmailPreferences.propTypes = {
164185
email: PT.string.isRequired,
165186
preferences: PT.shape().isRequired,
166187
saveEmailPreferences: PT.func.isRequired,
167188
updated: PT.shape(),
189+
status: PT.string,
168190
};

src/shared/components/Settings/Preferences/Email/styles.scss

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,24 @@
3636
.preferences-container {
3737
border-top: 1px solid $tc-gray-neutral-dark;
3838
}
39+
40+
.unsubscribed-msg {
41+
@include sofia-pro-regular;
42+
43+
display: flex;
44+
flex-direction: column;
45+
background-color: $tc-red-10;
46+
border: 1px solid $tc-red-30;
47+
color: $tc-red;
48+
line-height: 20px;
49+
margin-bottom: 25px;
50+
padding: 10px;
51+
text-align: left;
52+
font-size: 13px;
53+
align-items: flex-start;
54+
55+
button {
56+
margin: 20px 0 0 0;
57+
}
58+
}
3959
}

src/shared/components/Settings/ToggleableItem/index.jsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export default function ToggleableItem({
1818
primaryText,
1919
secondaryText,
2020
value,
21+
disabled,
2122
}) {
2223
return (
2324
<div styleName="ToggleableItem">
@@ -38,6 +39,7 @@ export default function ToggleableItem({
3839
checked={checked}
3940
onChange={onToggle}
4041
className="onoffswitch-checkbox"
42+
disabled={disabled}
4143
/>
4244
<label htmlFor={`pre-onoffswitch-${id}`} className="onoffswitch-label">
4345
<span className="onoffswitch-inner" />
@@ -54,6 +56,7 @@ export default function ToggleableItem({
5456
checked={checked}
5557
onChange={onToggle}
5658
className="onoffswitch-checkbox"
59+
disabled={disabled}
5760
/>
5861
<label htmlFor={`pre-onoffswitch-${id}`} className="onoffswitch-label">
5962
<span className="onoffswitch-inner" />
@@ -65,11 +68,16 @@ export default function ToggleableItem({
6568
);
6669
}
6770

71+
ToggleableItem.defaultProps = {
72+
disabled: false,
73+
};
74+
6875
ToggleableItem.propTypes = {
6976
id: PT.string.isRequired,
7077
value: PT.string.isRequired,
7178
checked: PT.bool.isRequired,
7279
primaryText: PT.string.isRequired,
7380
secondaryText: PT.string.isRequired,
7481
onToggle: PT.func.isRequired,
82+
disabled: PT.bool,
7583
};

src/shared/containers/NewsletterPreferences.jsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class NewsletterPreferencesContainer extends React.Component {
2020

2121
render() {
2222
const {
23-
loading, error, preferences, saveEmailPreferences, email, updated,
23+
loading, error, preferences, saveEmailPreferences, email, updated, status,
2424
} = this.props;
2525
if (loading || !preferences) return <LoadingIndicator />;
2626
if (error) {
@@ -32,6 +32,7 @@ class NewsletterPreferencesContainer extends React.Component {
3232
preferences={preferences}
3333
saveEmailPreferences={saveEmailPreferences}
3434
updated={updated}
35+
status={status}
3536
/>
3637
);
3738
}
@@ -42,6 +43,7 @@ NewsletterPreferencesContainer.defaultProps = {
4243
error: null,
4344
preferences: null,
4445
updated: null,
46+
status: null,
4547
};
4648

4749
NewsletterPreferencesContainer.propTypes = {
@@ -52,6 +54,7 @@ NewsletterPreferencesContainer.propTypes = {
5254
preferences: PT.shape(),
5355
email: PT.string.isRequired,
5456
updated: PT.shape(),
57+
status: PT.string,
5558
};
5659

5760
function mapStateToProps(state) {
@@ -61,6 +64,7 @@ function mapStateToProps(state) {
6164
loading: newsletterPreferences.loading,
6265
error: newsletterPreferences.error,
6366
preferences: newsletterPreferences.preferences,
67+
status: newsletterPreferences.status,
6468
updated: newsletterPreferences.updated,
6569
};
6670
}

src/shared/reducers/newsletterPreferences.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ function onInit(state, { payload }) {
1515
...state,
1616
email: payload,
1717
preferences: {},
18+
status: null,
1819
loading: true,
1920
};
2021
}
@@ -28,6 +29,7 @@ function onDone(state, { payload }) {
2829
return {
2930
...state,
3031
preferences: payload.error ? null : payload.preferences,
32+
status: payload.error ? null : payload.status,
3133
error: payload.error,
3234
loading: false,
3335
};

0 commit comments

Comments
 (0)