From b6d659aea9270d56c6f751b12c7030bf4cdb880e Mon Sep 17 00:00:00 2001
From: esikkala <esko.ikkala@aalto.fi>
Date: Wed, 26 Jan 2022 12:36:25 +0200
Subject: [PATCH] Federated search route as optional

---
 src/client/containers/SemanticPortal.js | 86 ++++++++++++++-----------
 1 file changed, 48 insertions(+), 38 deletions(-)

diff --git a/src/client/containers/SemanticPortal.js b/src/client/containers/SemanticPortal.js
index f3520202..8dc6cd60 100644
--- a/src/client/containers/SemanticPortal.js
+++ b/src/client/containers/SemanticPortal.js
@@ -97,9 +97,16 @@ const SemanticPortal = props => {
   const location = useLocation()
   const rootUrlWithLang = `${rootUrl}/${props.options.currentLocale}`
   const screenSize = getScreenSize()
-  const noClientFSResults = props.clientFSState && props.clientFSState.results === null
+  const federatedSearchPerspectives = []
+  let noClientFSResults = true
+  perspectiveConfig.forEach(perspective => {
+    if (perspective.searchMode === 'federated-search') {
+      federatedSearchPerspectives.push(perspective)
+      noClientFSResults = props.clientFSState && props.clientFSState.results === null
+    }
+  })
 
-  // trigger a new “page view” event whenever a new page loads
+  // trigger a new "page view" event whenever a new page loads
   usePageViews()
 
   // set HTML title and description dynamically based on translations
@@ -309,42 +316,45 @@ const SemanticPortal = props => {
             </Route>
           </Switch>
         )}
-        {/* optional: create a route for client side faceted search */}
-        <Route path={`${rootUrlWithLang}/perspective4/federated-search`}>
-          <FederatedSearchPerspective
-            portalConfig={portalConfig}
-            layoutConfig={layoutConfig}
-            facetedSearchMode='clientFS'
-            facetClass='perspective4'
-            resultClass='perspective4'
-            facetState={props.clientFSState}
-            clientFSFacetValues={props.clientFSFacetValues}
-            fetchingResultCount={props.clientFSState.textResultsFetching}
-            resultCount={noClientFSResults ? 0 : props.clientFSState.results.length}
-            noClientFSResults={noClientFSResults}
-            clientFSState={props.clientFSState}
-            clientFSToggleDataset={props.clientFSToggleDataset}
-            clientFSFetchResults={props.clientFSFetchResults}
-            clientFSClearResults={props.clientFSClearResults}
-            clientFSUpdateQuery={props.clientFSUpdateQuery}
-            clientFSUpdateFacet={props.clientFSUpdateFacet}
-            defaultActiveFacets={perspectiveConfig.find(p => p.id === 'perspective4').defaultActiveFacets}
-            updateMapBounds={props.updateMapBounds}
-            screenSize={screenSize}
-            showError={props.showError}
-            rootUrl={rootUrlWithLang}
-            apexChartsConfig={apexChartsConfig}
-            leafletConfig={leafletConfig}
-            networkConfig={networkConfig}
-            perspective={perspectiveConfig.find(p => p.id === 'perspective4')}
-            clientFSResults={props.clientFSResults}
-            clientFSSortResults={props.clientFSSortResults}
-            leafletMapState={props.leafletMap}
-            fetchGeoJSONLayersBackend={props.fetchGeoJSONLayersBackend}
-            fetchGeoJSONLayers={props.fetchGeoJSONLayers}
-            clearGeoJSONLayers={props.clearGeoJSONLayers}
-          />
-        </Route>
+        {/* optional: create routes for client side faceted search */}
+        {federatedSearchPerspectives.length > 0 &&
+          federatedSearchPerspectives.map(perspective =>
+            <Route key={perspective.id} path={`${rootUrlWithLang}/${perspective.id}/federated-search`}>
+              <FederatedSearchPerspective
+                portalConfig={portalConfig}
+                layoutConfig={layoutConfig}
+                facetedSearchMode='clientFS'
+                facetClass={perspective.id}
+                resultClass={perspective.id}
+                facetState={props.clientFSState}
+                clientFSFacetValues={props.clientFSFacetValues}
+                fetchingResultCount={props.clientFSState.textResultsFetching}
+                resultCount={noClientFSResults ? 0 : props.clientFSState.results.length}
+                noClientFSResults={noClientFSResults}
+                clientFSState={props.clientFSState}
+                clientFSToggleDataset={props.clientFSToggleDataset}
+                clientFSFetchResults={props.clientFSFetchResults}
+                clientFSClearResults={props.clientFSClearResults}
+                clientFSUpdateQuery={props.clientFSUpdateQuery}
+                clientFSUpdateFacet={props.clientFSUpdateFacet}
+                defaultActiveFacets={perspective.defaultActiveFacets}
+                updateMapBounds={props.updateMapBounds}
+                screenSize={screenSize}
+                showError={props.showError}
+                rootUrl={rootUrlWithLang}
+                apexChartsConfig={apexChartsConfig}
+                leafletConfig={leafletConfig}
+                networkConfig={networkConfig}
+                perspective={perspective}
+                clientFSResults={props.clientFSResults}
+                clientFSSortResults={props.clientFSSortResults}
+                leafletMapState={props.leafletMap}
+                fetchGeoJSONLayersBackend={props.fetchGeoJSONLayersBackend}
+                fetchGeoJSONLayers={props.fetchGeoJSONLayers}
+                clearGeoJSONLayers={props.clearGeoJSONLayers}
+              />
+            </Route>
+          )}
         {/* create routes for top bar info buttons */}
         {!layoutConfig.topBar.externalAboutPage &&
           <Route path={`${rootUrlWithLang}/about`}>
-- 
GitLab