mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-03-25 02:31:59 -05:00
Handled auto unsubscribe email newsletter
refs TryGhost/Team#1495 For single newsletters, the unsubscribe link on emails auto unsubscribed member from the newsletter. In case of multiple newsletters, we were missing the newsletter information on unsubscribe URL that will allow us to auto unsubscribe member from that specific newsletter as they intended, while allowing them option to manage other newsletter preferences. This change handles the newsletter param in unsubscribe link and auto unsubscribes the member from that newsletter.
This commit is contained in:
parent
7e4ec97c0a
commit
160c61e66f
3 changed files with 39 additions and 8 deletions
|
@ -399,7 +399,8 @@ export default class App extends React.Component {
|
|||
showPopup: true,
|
||||
page: 'unsubscribe',
|
||||
pageData: {
|
||||
uuid: qParams.get('uuid')
|
||||
uuid: qParams.get('uuid'),
|
||||
newsletterUuid: qParams.get('newsletter')
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -31,6 +31,14 @@ function AccountHeader() {
|
|||
);
|
||||
}
|
||||
|
||||
async function updateMemberNewsletters({api, memberUuid, newsletters}) {
|
||||
try {
|
||||
return await api.member.updateNewsletters({uuid: memberUuid, newsletters});
|
||||
} catch (e) {
|
||||
// ignore auto unsubscribe error
|
||||
}
|
||||
}
|
||||
|
||||
export default function UnsubscribePage() {
|
||||
const {site, pageData, onAction} = useContext(AppContext);
|
||||
const api = setupGhostApi({siteUrl: site.url});
|
||||
|
@ -48,16 +56,27 @@ export default function UnsubscribePage() {
|
|||
const memberData = await ghostApi.member.newsletters({uuid: pageData.uuid});
|
||||
|
||||
setMember(memberData);
|
||||
setSubscribedNewsletters(memberData?.newsletters || []);
|
||||
const memberNewsletters = memberData?.newsletters || [];
|
||||
setSubscribedNewsletters(memberNewsletters);
|
||||
if (siteNewsletters?.length === 1) {
|
||||
try {
|
||||
await ghostApi.member.updateNewsletters({uuid: pageData.uuid, newsletters: []});
|
||||
} catch (e) {
|
||||
// ignore auto unsubscribe error
|
||||
}
|
||||
const updatedData = await updateMemberNewsletters({
|
||||
api: ghostApi,
|
||||
memberUuid: pageData.uuid,
|
||||
newsletters: []
|
||||
});
|
||||
setSubscribedNewsletters(updatedData.newsletters);
|
||||
} else if (pageData.newsletterUuid) {
|
||||
const updatedData = await updateMemberNewsletters({
|
||||
api: ghostApi,
|
||||
memberUuid: pageData.uuid,
|
||||
newsletters: memberNewsletters?.filter((d) => {
|
||||
return d.uuid !== pageData.newsletterUuid;
|
||||
})
|
||||
});
|
||||
setSubscribedNewsletters(updatedData.newsletters);
|
||||
}
|
||||
})();
|
||||
}, [pageData.uuid, site.url, siteNewsletters?.length]);
|
||||
}, [pageData.uuid, pageData.newsletterUuid, site.url, siteNewsletters?.length]);
|
||||
|
||||
// Case: Email not found
|
||||
if (member === null) {
|
||||
|
|
|
@ -73,6 +73,17 @@ export function getProductCurrency({product}) {
|
|||
return product.monthlyPrice.currency;
|
||||
}
|
||||
|
||||
export function getNewsletterFromUuid({site, uuid}) {
|
||||
if (!uuid) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const newsletters = getSiteNewsletters({site});
|
||||
return newsletters?.find((newsletter) => {
|
||||
return newsletter.uuid = uuid;
|
||||
});
|
||||
}
|
||||
|
||||
export function getUpgradeProducts({site, member}) {
|
||||
const activePrice = getMemberActivePrice({member});
|
||||
const activePriceCurrency = activePrice?.currency;
|
||||
|
|
Loading…
Add table
Reference in a new issue