@@ -83,18 +83,20 @@ function ReposCard({ analyticsTag, icon, withAds }) {
8383 }
8484
8585 const globalTag = { value : 'global' , label : 'All trending' , githubValues : [ 'global' ] }
86+ const myLangsTag = { value : 'myLangs' , label : 'My Languages' , githubValues : [ 'myLangs' ] }
8687
8788 const preferences = useContext ( PreferencesContext )
8889
8990 const { userSelectedTags = [ ] , dispatcher, cardsSettings } = preferences
9091
91- const getTags = ( ) => [ ...userSelectedTags , globalTag ]
92+ const getTags = ( ) => [ ...userSelectedTags , globalTag , myLangsTag ]
9293
9394 const { show : showMenu } = useContextMenu ( )
9495
9596 const [ selectedTag , setSelectedTag ] = useState ( getInitialSelectedTag ( ) )
9697 const [ since , setSince ] = useState ( getInitialDateRange ( ) )
9798 const [ refresh , setRefresh ] = useState ( true )
99+ const [ repos , setRepos ] = useState ( { } )
98100 const dateRangeMapper = {
99101 daily : 'the day' ,
100102 weekly : 'the week' ,
@@ -103,6 +105,7 @@ function ReposCard({ analyticsTag, icon, withAds }) {
103105
104106 useEffect ( ( ) => {
105107 setSelectedTag ( getInitialSelectedTag ( ) )
108+ setRepos ( { } )
106109 setRefresh ( ! refresh )
107110 } , [ userSelectedTags ] )
108111
@@ -136,7 +139,35 @@ function ReposCard({ analyticsTag, icon, withAds }) {
136139 throw Error ( `Github Trending does not support ${ selectedTag . label } .` )
137140 }
138141
139- const data = await githubApi . getTrending ( selectedTag . githubValues [ 0 ] , since )
142+ const tagValue = selectedTag . githubValues [ 0 ]
143+ const key = `${ tagValue } -${ since } `
144+
145+ if ( repos [ key ] ) {
146+ return repos [ key ]
147+ }
148+
149+ if ( tagValue == myLangsTag . githubValues [ 0 ] ) {
150+ const promises = userSelectedTags . map (
151+ t => ! t . githubValues ? false : githubApi . getTrending ( t . githubValues [ 0 ] , since )
152+ )
153+ let values = await Promise . all ( promises )
154+ const nbrTags = values . length
155+ let minLength = 25
156+
157+ const data = [ ]
158+ for ( let index = 0 ; index < minLength ; index ++ ) {
159+ for ( let i = 0 ; i < nbrTags ; i ++ ) {
160+ data . push ( values [ i ] [ index ] )
161+ }
162+ }
163+
164+ setRepos ( { ...repos , [ key ] : data } )
165+ return data
166+
167+ }
168+
169+ const data = await githubApi . getTrending ( tagValue , since )
170+ setRepos ( { ...repos , [ key ] : data } )
140171 return data
141172 }
142173
0 commit comments