news.js (1283B)
1 /** 2 * React Starter Kit (https://www.reactstarterkit.com/) 3 * 4 * Copyright © 2014-present Kriasoft, LLC. All rights reserved. 5 * 6 * This source code is licensed under the MIT license found in the 7 * LICENSE.txt file in the root directory of this source tree. 8 */ 9 10 import { GraphQLList as List } from 'graphql'; 11 import fetch from '../../core/fetch'; 12 import NewsItemType from '../types/NewsItemType'; 13 14 // React.js News Feed (RSS) 15 const url = 'https://api.rss2json.com/v1/api.json' + 16 '?rss_url=https%3A%2F%2Freactjsnews.com%2Ffeed.xml'; 17 18 let items = []; 19 let lastFetchTask; 20 let lastFetchTime = new Date(1970, 0, 1); 21 22 const news = { 23 type: new List(NewsItemType), 24 resolve() { 25 if (lastFetchTask) { 26 return lastFetchTask; 27 } 28 29 if ((new Date() - lastFetchTime) > 1000 * 60 * 10 /* 10 mins */) { 30 lastFetchTime = new Date(); 31 lastFetchTask = fetch(url) 32 .then(response => response.json()) 33 .then((data) => { 34 if (data.status === 'ok') { 35 items = data.items; 36 } 37 38 return items; 39 }) 40 .finally(() => { 41 lastFetchTask = null; 42 }); 43 44 if (items.length) { 45 return items; 46 } 47 48 return lastFetchTask; 49 } 50 51 return items; 52 }, 53 }; 54 55 export default news;