From 51b2fce8c13c8e9393558d34dd664b7dd7749941 Mon Sep 17 00:00:00 2001
From: Brandon Millman <brandon.millman@gmail.com>
Date: Wed, 18 Apr 2018 15:22:02 -0400
Subject: Implement backendClient object to unify calls to the portal api

---
 packages/website/ts/pages/wiki/wiki.tsx | 53 ++++++++++++++++-----------------
 1 file changed, 25 insertions(+), 28 deletions(-)

(limited to 'packages/website/ts/pages/wiki/wiki.tsx')

diff --git a/packages/website/ts/pages/wiki/wiki.tsx b/packages/website/ts/pages/wiki/wiki.tsx
index 1330cbf86..7ed2b750d 100644
--- a/packages/website/ts/pages/wiki/wiki.tsx
+++ b/packages/website/ts/pages/wiki/wiki.tsx
@@ -19,6 +19,7 @@ import { SidebarHeader } from 'ts/components/sidebar_header';
 import { TopBar } from 'ts/components/top_bar/top_bar';
 import { Dispatcher } from 'ts/redux/dispatcher';
 import { Article, ArticlesBySection, WebsitePaths } from 'ts/types';
+import { backendClient } from 'ts/utils/backend_client';
 import { configs } from 'ts/utils/configs';
 import { constants } from 'ts/utils/constants';
 import { Translate } from 'ts/utils/translate';
@@ -200,34 +201,30 @@ export class Wiki extends React.Component<WikiProps, WikiState> {
         );
     }
     private async _fetchArticlesBySectionAsync(): Promise<void> {
-        const endpoint = `${configs.BACKEND_BASE_URL}${WebsitePaths.Wiki}`;
-        const response = await fetch(endpoint);
-        if (response.status === constants.HTTP_NO_CONTENT_STATUS_CODE) {
-            // We need to backoff and try fetching again later
-            this._wikiBackoffTimeoutId = window.setTimeout(() => {
-                // tslint:disable-next-line:no-floating-promises
-                this._fetchArticlesBySectionAsync();
-            }, WIKI_NOT_READY_BACKOUT_TIMEOUT_MS);
-            return;
-        }
-        if (response.status !== 200) {
-            // TODO: Show the user an error message when the wiki fail to load
-            const errMsg = await response.text();
-            logUtils.log(`Failed to load wiki: ${response.status} ${errMsg}`);
-            return;
-        }
-        const articlesBySection = await response.json();
-        if (!this._isUnmounted) {
-            this.setState(
-                {
-                    articlesBySection,
-                },
-                async () => {
-                    await utils.onPageLoadAsync();
-                    const hash = this.props.location.hash.slice(1);
-                    sharedUtils.scrollToHash(hash, sharedConstants.SCROLL_CONTAINER_ID);
-                },
-            );
+        try {
+            const articlesBySection = await backendClient.getWikiArticlesBySectionAsync();
+            if (!this._isUnmounted) {
+                this.setState(
+                    {
+                        articlesBySection,
+                    },
+                    async () => {
+                        await utils.onPageLoadAsync();
+                        const hash = this.props.location.hash.slice(1);
+                        sharedUtils.scrollToHash(hash, sharedConstants.SCROLL_CONTAINER_ID);
+                    },
+                );
+            }
+        } catch (err) {
+            const errMsg = `${err}`;
+            if (_.includes(errMsg, `${constants.HTTP_NO_CONTENT_STATUS_CODE}`)) {
+                // We need to backoff and try fetching again later
+                this._wikiBackoffTimeoutId = window.setTimeout(() => {
+                    // tslint:disable-next-line:no-floating-promises
+                    this._fetchArticlesBySectionAsync();
+                }, WIKI_NOT_READY_BACKOUT_TIMEOUT_MS);
+                return;
+            }
         }
     }
     private _getMenuSubsectionsBySection(articlesBySection: ArticlesBySection) {
-- 
cgit v1.2.3

