ff-stream-web

git clone git://archive.git.mtrnord.blog/MTRNord/ff-stream-web.git
Log | Files | Refs | README | LICENSE

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;