1- // TODO: This file needs a massive rewrite for GitHub Sponsors
21import React , { useState , useEffect } from 'react' ;
32import classnames from 'classnames' ;
43import shuffle from 'lodash.shuffle' ;
54import ExternalLink from '@theme/ExternalLink' ;
65
76import styles from './banner.module.scss' ;
87
9- const collectiveURL = 'https://rest.opencollective .com/v2/gulpjs/orders/incoming?status=active,paid&limit=1000 ' ;
8+ const sponsorsURL = 'https://serve.onegraph .com/graphql?app_id=c8251aa1-22ab-4dca-9e57-e7c335ddcd7c ' ;
109
11- function uniqueBySlug ( array ) {
12- const predicate = function ( o ) {
13- return o . fromAccount . slug ;
14- }
15- return array . reduce ( function ( acc , curr ) {
16- return acc . filter ( function ( a ) {
17- return predicate ( a ) === predicate ( curr ) ;
18- } ) . length ? acc : acc . push ( curr ) && acc
19- } , [ ] ) ;
20- }
21-
22- const specialFilter = [
23- 'addyosmani' ,
24- ] ;
25-
26- const thirtyTwoDaysAgo = Date . now ( ) - 2.765e+9 ;
27-
28- function withinMonth ( createdAt ) {
29- const datePaid = new Date ( createdAt ) ;
30- return datePaid >= thirtyTwoDaysAgo ;
31- }
32-
33- function recentNonCompanies ( backer ) {
34- if ( backer . fromAccount && specialFilter . includes ( backer . fromAccount . slug ) ) {
35- return false ;
36- }
37-
38- if ( backer . fromAccount && backer . fromAccount . type === 'ORGANIZATION' ) {
39- return false ;
40- }
41-
42- if ( backer . tier && backer . tier . slug === 'company' ) {
43- return false ;
44- }
45-
46- if ( backer . frequency === 'MONTHLY' && backer . status === 'ACTIVE' ) {
47- return true ;
48- }
49-
50- if ( backer . frequency === 'ONETIME' && backer . status === 'PAID' && withinMonth ( backer . createdAt ) ) {
10+ function between5And250 ( backer ) {
11+ const amount = backer . tier . amountDonated ;
12+ if ( amount >= 500 && amount < 25000 ) {
5113 return true ;
5214 }
5315
@@ -59,38 +21,54 @@ function selectRandom(backers) {
5921}
6022
6123async function getBackers ( ) {
62- const response = await fetch ( collectiveURL ) ;
63- const orders = await response . json ( ) ;
24+ const response = await fetch ( sponsorsURL , {
25+ method : 'POST' ,
26+ headers : {
27+ 'Content-Type' : 'application/json' ,
28+ } ,
29+ body : JSON . stringify ( {
30+ doc_id : 'fe685787-b348-42a4-960c-2322add1e11b' ,
31+ } ) ,
32+ } ) ;
6433
65- const allBackers = orders . nodes . filter ( recentNonCompanies ) ;
34+ // TODO: Handle errors
35+ const { data, errors } = await response . json ( ) ;
6636
67- const uniqueBackers = uniqueBySlug ( allBackers ) ;
68- const backersToDisplay = selectRandom ( uniqueBackers )
37+ let ghBackers = data . gitHub . organization . sponsors . nodes ;
38+ let ocBackers = data . openCollective . organization . sponsors . nodes ;
39+ let allBackers = [ ] . concat ( ghBackers , ocBackers ) ;
6940
70- return backersToDisplay . map ( function ( backer ) {
71- const fromAccount = backer . fromAccount ;
72- const totalDonations = backer . totalDonations ;
41+ const validBackers = allBackers . filter ( between5And250 ) ;
7342
74- const name = fromAccount . name ;
75- const slug = fromAccount . slug ;
76- const website = fromAccount . website ;
77- const twitterHandle = fromAccount . twitterHandle ;
78- const imageUrl = fromAccount . imageUrl ;
43+ const backersToDisplay = selectRandom ( validBackers )
44+
45+ return backersToDisplay . map ( function ( backer ) {
46+ const {
47+ name,
48+ openCollectiveHandle,
49+ twitterHandle,
50+ githubHandle,
51+ avatarUrl
52+ } = backer . sponsor ;
53+ // It is in US cents
54+ const monthlyAmount = ( backer . tier . amountDonated / 100 ) ;
7955
8056 let href ;
81- if ( website ) {
82- href = website ;
57+ if ( githubHandle ) {
58+ href = `https://github.com/ ${ githubHandle } ` ;
8359 } else if ( twitterHandle ) {
84- href = ' https://twitter.com/' + twitterHandle
60+ href = ` https://twitter.com/${ twitterHandle } ` ;
8561 } else {
86- href = ' https://opencollective.com/' + slug
62+ href = ` https://opencollective.com/${ openCollectiveHandle } `
8763 }
8864
65+ let usersName = name || githubHandle || twitterHandle || openCollectiveHandle || '' ;
66+
8967 return {
90- key : slug ,
91- src : imageUrl ,
92- alt : name ,
93- title : `Thank you ${ name } for $${ totalDonations . value } !` ,
68+ key : href ,
69+ src : avatarUrl ,
70+ alt : usersName ,
71+ title : `Thank you ${ usersName } for the $${ monthlyAmount } /month !` ,
9472 href : href ,
9573 } ;
9674 } ) ;
0 commit comments