diff --git a/website/fetchSupporters.js b/website/fetchSupporters.js index 212d63ffff69..35dfeddcf0ac 100644 --- a/website/fetchSupporters.js +++ b/website/fetchSupporters.js @@ -6,19 +6,22 @@ const fs = require('fs'); const request = require('request'); const path = require('path'); -const REQUIRED_KEYS = ['id']; +const REQUIRED_KEYS = ['fromAccount', 'tier', 'totalDonations']; request( - 'https://opencollective.com/api/groups/jest/backers', + 'https://rest.opencollective.com/v2/jest/orders/incoming/active?limit=1000', (err, response, body) => { if (err) console.error('Failed to fetch backers: ', err); // Basic validation - const content = JSON.parse(body); + const result = JSON.parse(body); + if (!result || !Array.isArray(result.nodes)) { + throw new Error('backer info is not an array'); + } - if (!Array.isArray(content)) throw new Error('backer info is not an array'); + const backers = result.nodes; - for (const item of content) { + for (const item of backers) { for (const key of REQUIRED_KEYS) { if (!item || typeof item !== 'object') throw new Error( @@ -31,10 +34,14 @@ request( } } - fs.writeFile(path.resolve(__dirname, 'backers.json'), body, err => { - if (err) { - console.error('Failed to write backers file: ', err); - } else console.log('Fetched 1 file: backers.json'); - }); + fs.writeFile( + path.resolve(__dirname, 'backers.json'), + JSON.stringify(backers), + err => { + if (err) { + console.error('Failed to write backers file: ', err); + } else console.log('Fetched 1 file: backers.json'); + } + ); } ); diff --git a/website/pages/en/index.js b/website/pages/en/index.js index 99b244f8e52a..0ca160b18e76 100755 --- a/website/pages/en/index.js +++ b/website/pages/en/index.js @@ -36,6 +36,48 @@ Button.defaultProps = { target: '_self', }; +const Sponsor = ({ + fromAccount: {name, slug, website, imageUrl}, + totalDonations, +}) => ( + + { + {name + } + +); + +const Backer = ({ + fromAccount: {name, slug, website, imageUrl}, + totalDonations, +}) => ( + + { + {name + } + +); + class Contributors extends React.Component { render() { return ( @@ -50,28 +92,8 @@ class Contributors extends React.Component {

{backers - .filter(b => b.tier === 'sponsor') - .map(b => ( - - { - { - } - - ))} + .filter(b => b.tier && b.tier.slug === 'sponsor') + .map(Sponsor)}

Backers @@ -83,28 +105,13 @@ class Contributors extends React.Component {

{backers - .filter(b => b.tier === 'backer' && !b.slug.includes('adult')) - .map(b => ( - - { - { - } - - ))} + .filter( + b => + b.tier && + b.tier.slug === 'backer' && + !b.fromAccount.slug.includes('adult') + ) + .map(Backer)}
);