]> source.dussan.org Git - sonarqube.git/commitdiff
Small performance improvement on documentation search
authorWouter Admiraal <wouter.admiraal@sonarsource.com>
Fri, 14 Jun 2019 08:07:55 +0000 (10:07 +0200)
committersonartech <sonartech@sonarsource.com>
Fri, 28 Jun 2019 06:45:42 +0000 (08:45 +0200)
server/sonar-docs/src/components/Search.tsx
server/sonar-web/src/main/js/apps/documentation/components/SearchResults.tsx

index d798a2b5ad2e9b6e7e0d7373c2e1c759b9384ec9..a4a24c40eeec88d75b62e3bd5920b46a5500205a 100644 (file)
@@ -73,6 +73,13 @@ export default class Search extends React.PureComponent<Props, State> {
           return undefined;
         }
 
+        const searchResultPage: SearchResult['page'] = {
+          id: page.id,
+          text: (page.html || '').replace(/<(?:.|\n)*?>/gm, '').replace(/&#x3C;(?:.|\n)*?>/gm, ''),
+          title: getMarkdownRemarkTitle(page) || '',
+          url: getMarkdownRemarkUrl(page) || ''
+        };
+
         const highlights: { [field: string]: [number, number][] } = {};
         let longestTerm = '';
         let exactMatch = false;
@@ -103,14 +110,7 @@ export default class Search extends React.PureComponent<Props, State> {
         });
 
         return {
-          page: {
-            id: page.id,
-            text: (page.html || '')
-              .replace(/<(?:.|\n)*?>/gm, '')
-              .replace(/&#x3C;(?:.|\n)*?>/gm, ''),
-            title: getMarkdownRemarkTitle(page) || '',
-            url: getMarkdownRemarkUrl(page) || ''
-          },
+          page: searchResultPage,
           exactMatch,
           highlights,
           query,
index 909a80e912337c607a398753038adb20f4ce654a..644a406918e58aabd6272b48bc42cc91848a6d88 100644 (file)
@@ -21,9 +21,10 @@ import * as React from 'react';
 import lunr, { LunrBuilder, LunrIndex, LunrToken } from 'lunr';
 import { sortBy } from 'lodash';
 import { DocNavigationItem } from 'Docs/@types/types';
-import SearchResultEntry, { SearchResult } from './SearchResultEntry';
+import SearchResultEntry from './SearchResultEntry';
 import { getUrlsList } from '../navTreeUtils';
 import { DocumentationEntry } from '../utils';
+import { isDefined } from '../../../helpers/types';
 
 interface Props {
   navigation: DocNavigationItem[];
@@ -62,6 +63,11 @@ export default class SearchResults extends React.PureComponent<Props> {
       )
       .map(match => {
         const page = this.props.pages.find(page => page.relativeName === match.ref);
+
+        if (!page) {
+          return null;
+        }
+
         const highlights: T.Dict<[number, number][]> = {};
         let longestTerm = '';
         let exactMatch = false;
@@ -93,7 +99,7 @@ export default class SearchResults extends React.PureComponent<Props> {
 
         return { exactMatch, highlights, longestTerm, page, query };
       })
-      .filter(result => result.page) as SearchResult[];
+      .filter(isDefined);
 
     // Re-order results by the length of the longest matched term and by exact
     // match (if applicable). The longer the matched term is, the higher the