Skip to content

Instantly share code, notes, and snippets.

@marr
Last active March 8, 2016 18:44
Show Gist options
  • Save marr/3025ebc09705af303470 to your computer and use it in GitHub Desktop.
Save marr/3025ebc09705af303470 to your computer and use it in GitHub Desktop.
export const LOAD_EMAIL_PREFERENCES = 'LOAD_EMAIL_PREFERENCES'
export const LOADED_EMAIL_PREFERENCES = 'LOADED_EMAIL_PREFERENCES'
export function loadEmailPreferences (personId) {
const emailPreferences = { newsletters: [] }
return async (dispatch, getState) => {
dispatch({ type: LOAD_EMAIL_PREFERENCES })
const account = getState().guests[personId].account
const centres = account.newsletter_centre_ids
const subscriptions = account.newsletter_subscriptions
if (centres.length) {
const newslettersByCentre = await Promise.all(centres.map(getNewslettersByCentre))
newslettersByCentre.forEach(centreNewsletters => {
centreNewsletters.forEach(({ newsletters }) => {
newsletters.forEach(newsletter => {
if (subscriptions.includes(newsletter.newsletter_id)) {
emailPreferences.newsletters.push(newsletter)
}
})
})
})
dispatch({ type: LOADED_EMAIL_PREFERENCES, payload: emailPreferences })
}
}
}
async function getNewslettersByCentre (centre_id) {
const newslettersEndpoint = NEWSLETTERS_ENDPOINT.clone()
newslettersEndpoint.addQuery('centre_id', centre_id)
const newslettersResponse = await looseFetch(newslettersEndpoint)
return newslettersResponse.data // [{centre_id, newsletters}]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment