Skip to content

Commit 6dbbb6c

Browse files
Merge pull request #6753 from topcoder-platform/PROD-3059
fix: mailchimp subscribe issues
2 parents e68ddba + 711a6bb commit 6dbbb6c

File tree

6 files changed

+64
-24
lines changed

6 files changed

+64
-24
lines changed

__tests__/shared/components/Settings/Preferences/Email/__snapshots__/index.jsx.snap

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@ exports[`renders email preferences setting page correctly 1`] = `
77
<Item
88
description="If this was a mistake or if you would like to resubscribe, please click the “Subscribe” button."
99
email="test@test.com"
10-
id="email"
11-
isSubscribeForm={true}
10+
formLink="https://topcoder.us13.list-manage.com/subscribe/post?u=65bd5a1857b73643aad556093&id=28bfd3c062"
11+
icon="email"
12+
isForm={true}
1213
link=""
1314
linkTitle="SUBSCRIBE"
15+
status={null}
1416
title="You are not subscribed to receive topcoder emails"
17+
value="subscribe"
1518
/>
1619
</div>
1720
`;
Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
1-
import email from 'assets/images/preferences/email.svg';
21

3-
const data = {
4-
id: 'email',
5-
icon: email,
2+
export const subscribe = {
3+
id: 'subscribe',
4+
icon: 'email',
65
name: 'You are not subscribed to receive topcoder emails',
76
description: 'If this was a mistake or if you would like to resubscribe, please click the “Subscribe” button.',
87
linkTitle: 'SUBSCRIBE',
8+
formLink: 'https://topcoder.us13.list-manage.com/subscribe/post?u=65bd5a1857b73643aad556093&id=28bfd3c062',
9+
value: 'subscribe',
910
};
1011

11-
export default data;
12+
export const unsubscribe = {
13+
id: 'unsubscribe',
14+
icon: 'email',
15+
name: 'You are currently subscribed to receive topcoder emails',
16+
description: 'If this was a mistake or if you would like to unsubscribe, please click the “Unsubscribe” button.',
17+
linkTitle: 'UNSUBSCRIBE',
18+
formLink: 'https://topcoder.us13.list-manage.com/unsubscribe?u=65bd5a1857b73643aad556093&id=28bfd3c062',
19+
value: 'unsubscribe',
20+
};

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

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import PT from 'prop-types';
88
import { toastr } from 'react-redux-toastr';
99
import ToggleableItem from 'components/Settings/ToggleableItem';
1010
import Item from '../List/Item';
11-
import subscribe from './data';
11+
import { subscribe, unsubscribe } from './data';
1212

1313
import './styles.scss';
1414

@@ -128,16 +128,31 @@ export default class EmailPreferences extends React.Component {
128128
{
129129
status !== 'subscribed' ? (
130130
<Item
131-
isSubscribeForm
131+
status={status}
132132
email={email}
133133
key={subscribe.id}
134-
id={subscribe.id}
134+
icon={subscribe.icon}
135135
title={subscribe.name}
136136
description={subscribe.description}
137137
linkTitle={subscribe.linkTitle}
138+
formLink={subscribe.formLink}
139+
value={subscribe.value}
140+
isForm
138141
/>
139142
) : (
140143
<React.Fragment>
144+
<Item
145+
status={status}
146+
email={email}
147+
key={unsubscribe.id}
148+
icon={unsubscribe.icon}
149+
title={unsubscribe.name}
150+
description={unsubscribe.description}
151+
linkTitle={unsubscribe.linkTitle}
152+
formLink={unsubscribe.formLink}
153+
value={unsubscribe.value}
154+
isForm
155+
/>
141156
{
142157
map(newsletters, (newsletter) => {
143158
const checked = emailPreferences[newsletter.id];

src/shared/components/Settings/Preferences/List/Item/index.jsx

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import React from 'react';
55
import PT from 'prop-types';
66
import ReactSVG from 'react-svg';
7+
import cn from 'classnames';
78
import { isomorphy } from 'topcoder-react-utils';
89

910
import './styles.scss';
@@ -14,19 +15,22 @@ if (isomorphy.isClientSide()) {
1415
}
1516

1617
export default function Item({
17-
id,
18+
icon,
1819
title,
1920
description,
2021
link,
22+
status,
2123
linkTitle,
2224
email,
23-
isSubscribeForm,
25+
formLink,
26+
value,
27+
isForm,
2428
}) {
2529
return (
26-
<div styleName="item-container">
30+
<div styleName={cn('item-container', status === 'subscribed' && 'subscribed')}>
2731
<div styleName="body">
2832
<div styleName="icon-wrapper">
29-
{ assets && assets.keys().includes(`./${id.toLowerCase()}.svg`) ? <ReactSVG path={assets(`./${id.toLowerCase()}.svg`)} /> : '' }
33+
{ assets && assets.keys().includes(`./${icon.toLowerCase()}.svg`) ? <ReactSVG path={assets(`./${icon.toLowerCase()}.svg`)} /> : '' }
3034
</div>
3135
<div styleName="info">
3236
<div styleName="info-first-line">
@@ -37,34 +41,40 @@ export default function Item({
3741
</div>
3842
</div>
3943
{
40-
!isSubscribeForm ? (
41-
<a href={link} target="_blank" rel="noopener noreferrer" styleName="link-btn"><span>{ linkTitle }</span></a>
42-
) : (
43-
<form action="https://topcoder.us13.list-manage.com/subscribe/post?u=65bd5a1857b73643aad556093&amp;id=28bfd3c062" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" noValidate>
44+
status && isForm && (
45+
<form action={formLink} method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" noValidate>
4446
<input type="email" value={email} readOnly name="EMAIL" id="mce-EMAIL" />
4547
<input type="checkbox" id="gdpr_11101" name="gdpr[11101]" value="Y" />
4648
<input type="text" name="b_65bd5a1857b73643aad556093_28bfd3c062" tabIndex="-1" value="" />
47-
<input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" className="submit-button" />
49+
<input type="submit" value={value} name={value} id="mc-embedded-subscribe" className="submit-button" />
4850
</form>
4951
)
5052
}
53+
54+
{ !isForm && <a href={link} target="_blank" rel="noopener noreferrer" styleName="link-btn"><span>{ linkTitle }</span></a>}
5155
</div>
5256
</div>
5357
);
5458
}
5559

5660
Item.defaultProps = {
5761
link: '',
58-
isSubscribeForm: false,
5962
email: '',
63+
status: '',
64+
value: '',
65+
formLink: '',
66+
isForm: false,
6067
};
6168

6269
Item.propTypes = {
6370
linkTitle: PT.string.isRequired,
6471
title: PT.string.isRequired,
6572
description: PT.string.isRequired,
73+
status: PT.string,
6674
link: PT.string,
67-
isSubscribeForm: PT.bool,
75+
isForm: PT.bool,
76+
formLink: PT.string,
77+
value: PT.string,
6878
email: PT.string,
69-
id: PT.string.isRequired,
79+
icon: PT.string.isRequired,
7080
};

src/shared/components/Settings/Preferences/List/Item/styles.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
background: $tc-white;
1212
border: 1px solid $listing-light-gray;
1313
border-radius: 8px;
14+
15+
&.subscribed {
16+
margin-bottom: 0 !important;
17+
}
1418
}
1519

1620
.item-container:not(:last-child) {

src/shared/components/Settings/Preferences/List/data.jsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
import forum from 'assets/images/preferences/forum.svg';
21

32
import { config } from 'topcoder-react-utils';
43

54
const data = [
65
{
76
id: 'forum',
8-
icon: forum,
7+
icon: 'forum',
98
name: 'Forum',
109
description: 'To setup your forum preferences, please click the “Go To Forum” button.',
1110
link: `${config.URL.FORUMS_VANILLA}/profile/preferences`,

0 commit comments

Comments
 (0)