From 0ce6ee322d75235cf12c2ed719d4c8028aba85cc Mon Sep 17 00:00:00 2001
From: esikkala <esko.ikkala@aalto.fi>
Date: Thu, 16 Dec 2021 09:18:06 +0200
Subject: [PATCH] JSON configs for instancePageResultClasses

---
 .../only_instance_pages/actors.json           | 17 ++++++-
 .../only_instance_pages/collections.json      | 17 ++++++-
 .../only_instance_pages/events.json           | 17 ++++++-
 .../only_instance_pages/expressions.json      | 17 ++++++-
 .../only_instance_pages/manuscripts.json      | 47 +++++++++++++------
 .../only_instance_pages/places.json           | 17 ++++++-
 .../only_instance_pages/works.json            | 17 ++++++-
 src/client/helpers/helpers.js                 | 19 ++++++--
 src/server/sparql/Utils.js                    | 21 ++++++++-
 9 files changed, 162 insertions(+), 27 deletions(-)

diff --git a/src/client/configs/sampo/perspective_configs/only_instance_pages/actors.json b/src/client/configs/sampo/perspective_configs/only_instance_pages/actors.json
index f93b31a1..49126e6d 100644
--- a/src/client/configs/sampo/perspective_configs/only_instance_pages/actors.json
+++ b/src/client/configs/sampo/perspective_configs/only_instance_pages/actors.json
@@ -11,7 +11,22 @@
   "resultClasses": {
     "actors": {
         "instanceConfig": {
-            "propertiesQueryBlock": "actorProperties"
+            "propertiesQueryBlock": "actorProperties",
+            "instancePageResultClasses": {
+              "instancePageTable": {
+                "tabID": 0,
+                "component": "InstancePageTable",
+                "tabPath": "table",
+                "tabIcon": "CalendarViewDay"
+              },
+              "instancePageExport": {
+                "tabID": 1,
+                "component": "Export",
+                "tabPath": "export",
+                "tabIcon": "CloudDownload",
+                "pageType": "instancePage"
+              }
+            }
         }
     }
 },
diff --git a/src/client/configs/sampo/perspective_configs/only_instance_pages/collections.json b/src/client/configs/sampo/perspective_configs/only_instance_pages/collections.json
index 768d6a32..0ef36859 100644
--- a/src/client/configs/sampo/perspective_configs/only_instance_pages/collections.json
+++ b/src/client/configs/sampo/perspective_configs/only_instance_pages/collections.json
@@ -11,7 +11,22 @@
   "resultClasses": {
     "collections": {
       "instanceConfig": {
-        "propertiesQueryBlock": "eventProperties"
+        "propertiesQueryBlock": "collectionProperties",
+        "instancePageResultClasses": {
+          "instancePageTable": {
+            "tabID": 0,
+            "component": "InstancePageTable",
+            "tabPath": "table",
+            "tabIcon": "CalendarViewDay"
+          },
+          "instancePageExport": {
+            "tabID": 1,
+            "component": "Export",
+            "tabPath": "export",
+            "tabIcon": "CloudDownload",
+            "pageType": "instancePage"
+          }
+        }
       }
     }
   },
diff --git a/src/client/configs/sampo/perspective_configs/only_instance_pages/events.json b/src/client/configs/sampo/perspective_configs/only_instance_pages/events.json
index 369786ec..70ff35eb 100644
--- a/src/client/configs/sampo/perspective_configs/only_instance_pages/events.json
+++ b/src/client/configs/sampo/perspective_configs/only_instance_pages/events.json
@@ -11,7 +11,22 @@
   "resultClasses": {
     "events": {
       "instanceConfig": {
-        "propertiesQueryBlock": "eventProperties"
+        "propertiesQueryBlock": "eventProperties",
+        "instancePageResultClasses": {
+          "instancePageTable": {
+            "tabID": 0,
+            "component": "InstancePageTable",
+            "tabPath": "table",
+            "tabIcon": "CalendarViewDay"
+          },
+          "instancePageExport": {
+            "tabID": 1,
+            "component": "Export",
+            "tabPath": "export",
+            "tabIcon": "CloudDownload",
+            "pageType": "instancePage"
+          }
+        }
       }
     }
   },
diff --git a/src/client/configs/sampo/perspective_configs/only_instance_pages/expressions.json b/src/client/configs/sampo/perspective_configs/only_instance_pages/expressions.json
index 91f966f1..93f1837d 100644
--- a/src/client/configs/sampo/perspective_configs/only_instance_pages/expressions.json
+++ b/src/client/configs/sampo/perspective_configs/only_instance_pages/expressions.json
@@ -11,7 +11,22 @@
   "resultClasses": {
     "expressions": {
       "instanceConfig": {
-        "propertiesQueryBlock": "expressionProperties"
+        "propertiesQueryBlock": "expressionProperties",
+        "instancePageResultClasses": {
+          "instancePageTable": {
+            "tabID": 0,
+            "component": "InstancePageTable",
+            "tabPath": "table",
+            "tabIcon": "CalendarViewDay"
+          },
+          "instancePageExport": {
+            "tabID": 1,
+            "component": "Export",
+            "tabPath": "export",
+            "tabIcon": "CloudDownload",
+            "pageType": "instancePage"
+          }
+        }
       }
     }
   },
diff --git a/src/client/configs/sampo/perspective_configs/only_instance_pages/manuscripts.json b/src/client/configs/sampo/perspective_configs/only_instance_pages/manuscripts.json
index 9bf7623a..0eaaa7af 100644
--- a/src/client/configs/sampo/perspective_configs/only_instance_pages/manuscripts.json
+++ b/src/client/configs/sampo/perspective_configs/only_instance_pages/manuscripts.json
@@ -1,7 +1,7 @@
 {
     "id": "manuscripts",
     "endpoint": {
-        "url": "http://ldf.fi/mmm/sparql",
+        "url": "https://ldf.fi/mmm/sparql",
         "useAuth": false,
         "prefixesFile": "SparqlQueriesPrefixes.js"
     },
@@ -11,22 +11,39 @@
     "resultClasses": {
         "manuscripts": {
             "instanceConfig": {
-                "propertiesQueryBlock": "manuscriptPropertiesInstancePage"
-            }
+                "propertiesQueryBlock": "manuscriptPropertiesInstancePage",
+                "instancePageResultClasses": {
+                    "instancePageTable": {
+                        "tabID": 0,
+                        "component": "InstancePageTable",
+                        "tabPath": "table",
+                        "tabIcon": "CalendarViewDay"
+                    },
+                    "manuscriptInstancePageNetwork": {
+                        "tabID": 1,
+                        "component": "Network",
+                        "tabPath": "network",
+                        "tabIcon": "BubbleChart",
+                        "pageType": "instancePage",
+                        "sparqlQuery": "manuscriptInstancePageNetworkLinksQuery",
+                        "sparqlQueryNodes": "manuscriptNetworkNodesQuery",
+                        "useNetworkAPI": true,
+                        "limit": 200,
+                        "optimize": 1.2,
+                        "style": "cytoscapeStyle",
+                        "layout": "coseLayout"
+                    },
+                    "instancePageExport": {
+                        "tabID": 2,
+                        "component": "Export",
+                        "tabPath": "export",
+                        "tabIcon": "CloudDownload",
+                        "pageType": "instancePage"
+                    }
+                }
+            }  
         }
     },
-    "instancePageTabs": [
-        {
-            "id": "table",
-            "value": 0,
-            "icon": "CalendarViewDay"
-        },
-        {
-            "id": "export",
-            "value": 1,
-            "icon": "CloudDownload"
-        }
-    ],
     "properties": [
         {
             "id": "uri",
diff --git a/src/client/configs/sampo/perspective_configs/only_instance_pages/places.json b/src/client/configs/sampo/perspective_configs/only_instance_pages/places.json
index 317a4fcd..4f090542 100644
--- a/src/client/configs/sampo/perspective_configs/only_instance_pages/places.json
+++ b/src/client/configs/sampo/perspective_configs/only_instance_pages/places.json
@@ -11,7 +11,22 @@
   "resultClasses": {
     "places": {
       "instanceConfig": {
-        "propertiesQueryBlock": "placePropertiesInstancePage"
+        "propertiesQueryBlock": "placePropertiesInstancePage",
+        "instancePageResultClasses": {
+          "instancePageTable": {
+            "tabID": 0,
+            "component": "InstancePageTable",
+            "tabPath": "table",
+            "tabIcon": "CalendarViewDay"
+          },
+          "instancePageExport": {
+            "tabID": 1,
+            "component": "Export",
+            "tabPath": "export",
+            "tabIcon": "CloudDownload",
+            "pageType": "instancePage"
+          }
+        }
       }
     }
   },
diff --git a/src/client/configs/sampo/perspective_configs/only_instance_pages/works.json b/src/client/configs/sampo/perspective_configs/only_instance_pages/works.json
index 4db8330e..a539a392 100644
--- a/src/client/configs/sampo/perspective_configs/only_instance_pages/works.json
+++ b/src/client/configs/sampo/perspective_configs/only_instance_pages/works.json
@@ -11,7 +11,22 @@
   "resultClasses": {
     "works": {
       "instanceConfig": {
-        "propertiesQueryBlock": "workProperties"
+        "propertiesQueryBlock": "workProperties",
+        "instancePageResultClasses": {
+          "instancePageTable": {
+            "tabID": 0,
+            "component": "InstancePageTable",
+            "tabPath": "table",
+            "tabIcon": "CalendarViewDay"
+          },
+          "instancePageExport": {
+            "tabID": 1,
+            "component": "Export",
+            "tabPath": "export",
+            "tabIcon": "CloudDownload",
+            "pageType": "instancePage"
+          }
+        }
       }
     }
   },
diff --git a/src/client/helpers/helpers.js b/src/client/helpers/helpers.js
index 9190c455..07cc14ac 100644
--- a/src/client/helpers/helpers.js
+++ b/src/client/helpers/helpers.js
@@ -166,7 +166,9 @@ export const generateLabelForMissingValue = ({ facetClass, facetID }) => {
 export const getLocalIDFromAppLocation = ({ location, perspectiveConfig }) => {
   const locationArr = location.pathname.split('/')
   let localID = locationArr.pop()
-  if (localID === perspectiveConfig.defaultInstancePageTab) {
+  const defaultTab = perspectiveConfig.defaultTab || 'table'
+  const defaultInstancePageTab = perspectiveConfig.defaultInstancePageTab || 'table'
+  if (localID === defaultTab || localID === defaultInstancePageTab) {
     localID = locationArr.pop() // pop again if tab id
   }
   perspectiveConfig.instancePageTabs.forEach(tab => {
@@ -250,11 +252,20 @@ export const createPerspectiveConfigOnlyInfoPages = async ({ portalID, onlyInsta
     perspectiveConfigOnlyInfoPages.push(perspective)
   }
   for (const perspective of perspectiveConfigOnlyInfoPages) {
-    if (has(perspective, 'instancePageTabs')) {
-      for (const tab of perspective.instancePageTabs) {
-        tab.icon = <MuiIcon iconName={tab.icon} />
+    const instancePageTabs = []
+    const defaultResultClassConfig = perspective.resultClasses[perspective.id]
+    if (has(defaultResultClassConfig.instanceConfig, 'instancePageResultClasses')) {
+      for (const instancePageResultClassID in defaultResultClassConfig.instanceConfig.instancePageResultClasses) {
+        const instancePageResultClassConfig = defaultResultClassConfig.instanceConfig.instancePageResultClasses[instancePageResultClassID]
+        const { tabID, tabPath, tabIcon } = instancePageResultClassConfig
+        instancePageTabs.push({
+          id: tabPath,
+          value: tabID,
+          icon: <MuiIcon iconName={tabIcon} />
+        })
       }
     }
+    perspective.instancePageTabs = sortBy(instancePageTabs, 'value')
   }
   return perspectiveConfigOnlyInfoPages
 }
diff --git a/src/server/sparql/Utils.js b/src/server/sparql/Utils.js
index 16b9f08f..b197343d 100644
--- a/src/server/sparql/Utils.js
+++ b/src/server/sparql/Utils.js
@@ -86,8 +86,6 @@ export const createBackendSearchConfig = async () => {
     }
     backendSearchConfig[perspectiveID] = perspectiveConfig
   }
-  // console.log(backendSearchConfig.perspective1.resultClasses.placesMsMigrations.postprocess.func)
-  // console.log(backendSearchConfig.perspective1.resultClasses.placesMsMigrations.resultMapper)
   for (const perspectiveID of portalConfig.perspectives.onlyInstancePages) {
     const perspectiveConfigJSON = await readFile(`src/client/configs/${portalID}/perspective_configs/only_instance_pages/${perspectiveID}.json`)
     const perspectiveConfig = JSON.parse(perspectiveConfigJSON)
@@ -97,6 +95,25 @@ export const createBackendSearchConfig = async () => {
     const instancePagePropertiesQueryBlockID = instanceConfig.propertiesQueryBlock
     const instancePagePropertiesQueryBlock = sparqlQueries[instancePagePropertiesQueryBlockID]
     instanceConfig.propertiesQueryBlock = instancePagePropertiesQueryBlock
+    let hasInstancePageResultClasses = false
+    if (has(instanceConfig, 'instancePageResultClasses')) {
+      for (const instancePageResultClass in instanceConfig.instancePageResultClasses) {
+        const instancePageResultClassConfig = instanceConfig.instancePageResultClasses[instancePageResultClass]
+        if (instancePageResultClassConfig.sparqlQuery) {
+          instancePageResultClassConfig.sparqlQuery = sparqlQueries[instancePageResultClassConfig.sparqlQuery]
+        }
+        if (instancePageResultClassConfig.sparqlQueryNodes) {
+          instancePageResultClassConfig.sparqlQueryNodes = sparqlQueries[instancePageResultClassConfig.sparqlQueryNodes]
+        }
+      }
+      hasInstancePageResultClasses = true
+    }
+    if (hasInstancePageResultClasses) {
+      perspectiveConfig.resultClasses = {
+        ...perspectiveConfig.resultClasses,
+        ...perspectiveConfig.resultClasses[perspectiveID].instanceConfig.instancePageResultClasses
+      }
+    }
     const { prefixesFile } = perspectiveConfig.endpoint
     const { prefixes } = await import(`../sparql/${portalID}/sparql_queries/${prefixesFile}`)
     perspectiveConfig.endpoint.prefixes = prefixes
-- 
GitLab