From 922a83a9480f6d6d657a5663c8532c943bdbdc00 Mon Sep 17 00:00:00 2001
From: vkovtun <viktor.kovtun@id.ethz.ch>
Date: Mon, 17 Jul 2023 12:24:40 +0200
Subject: [PATCH] SSDM-13579: Made the browser show real files.

---
 .../database/data-browser/DataBrowser.jsx     | 154 +++++++-----------
 1 file changed, 58 insertions(+), 96 deletions(-)

diff --git a/ui-admin/src/js/components/database/data-browser/DataBrowser.jsx b/ui-admin/src/js/components/database/data-browser/DataBrowser.jsx
index 7190b2fb82e..3ec8633b7b1 100644
--- a/ui-admin/src/js/components/database/data-browser/DataBrowser.jsx
+++ b/ui-admin/src/js/components/database/data-browser/DataBrowser.jsx
@@ -12,9 +12,9 @@ import Grid from '@src/js/components/common/grid/Grid.jsx'
 import GridFilterOptions from '@src/js/components/common/grid/GridFilterOptions.js'
 import AppController from '@src/js/components/AppController.js'
 import ItemIcon from '@src/js/components/database/data-browser/ItemIcon.jsx'
-import InfoPanel from "@src/js/components/database/data-browser/InfoPanel.jsx";
+import InfoPanel from '@src/js/components/database/data-browser/InfoPanel.jsx'
 
-const HTTP_SERVER_URI = "/data-store-server";
+const HTTP_SERVER_URI = '/data-store-server'
 
 const styles = theme => ({
   boundary: {
@@ -64,102 +64,22 @@ const configuration =
   ]
 
 class DataBrowser extends React.Component {
-
   constructor(props, context) {
     super(props, context)
     autoBind(this)
-    this.datastoreServer = new DataStoreServer('http://localhost:8085', HTTP_SERVER_URI);
-
-    const owner = "demo-sample"
-    const source = ""
-    this.datastoreServer.login("admin", "changeit", this.login);
-
+    this.datastoreServer = new DataStoreServer(
+      'http://localhost:8085',
+      HTTP_SERVER_URI
+    )
 
     this.state = {
       viewType: props.viewType,
-      files: [
-        {
-          name: 'Processed',
-          folder: true,
-          size: 0,
-          creationTime: new Date('2020-08-13 14:45:54.034563'),
-          lastModifiedTime: new Date('2022-02-24 04:35:21.486930'),
-          lastAccessTime: new Date('2023-05-25 14:55:31.902857')
-        },
-        {
-          name: 'Text.txt',
-          folder: false,
-          size: 21432,
-          creationTime: new Date('2020-08-13 14:45:54.034563'),
-          lastModifiedTime: new Date('2022-02-24 04:35:21.486930'),
-          lastAccessTime: new Date('2023-05-25 14:55:31.902857')
-        },
-        {
-          name: 'Movie.mp4',
-          folder: false,
-          size: 2143243443537,
-          creationTime: new Date('2020-08-13 14:45:54.034563'),
-          lastModifiedTime: new Date('2022-02-24 04:35:21.486930'),
-          lastAccessTime: new Date('2023-05-25 14:55:31.902857')
-        },
-        {
-          name: 'Music.mp3',
-          folder: false,
-          size: 21432443,
-          creationTime: new Date('2020-08-13 14:45:54.034563'),
-          lastModifiedTime: new Date('2022-02-24 04:35:21.486930'),
-          lastAccessTime: new Date('2023-05-25 14:55:31.902857')
-        },
-        {
-          name: 'Image.png',
-          folder: false,
-          size: 214323234,
-          creationTime: new Date('2020-08-13 14:45:54.034563'),
-          lastModifiedTime: new Date('2022-02-24 04:35:21.486930'),
-          lastAccessTime: new Date('2023-05-25 14:55:31.902857')
-        },
-        {
-          name: 'lock',
-          folder: false,
-          size: 0,
-          creationTime: new Date('2020-08-13 14:45:54.034563'),
-          lastModifiedTime: new Date('2023-05-30 15:33:14.048038'),
-          lastAccessTime: new Date('2023-05-30 15:33:14.048038')
-        }
-      ],
+      files: [],
       selectedFile: null,
       multiselectedFiles: new Set([]),
       showInfo: false
     }
   }
-
-  login(token) {
-    if (!token) {
-      alert("Could not perform login.");
-      return;
-    }
-
-    console.log("Token: " + token)
-    this.datastoreServer.list("demo-sample", "", "true", this.displayReturnedFiles)
-  }
-
-  displayReturnedFiles(data) {
-    if (data.error) {
-      console.error(data.error);
-      alert("Could not list files.");
-      return;
-    }
-
-    const results = data.result[1];
-
-    // Restrict the display to 50 samples
-    // results = results.splice(0, 50);
-
-    // generateTable(results);
-
-    console.log("Received data: " + results)
-  }
-
   handleViewTypeChange(viewType) {
     this.setState({ viewType })
   }
@@ -169,15 +89,45 @@ class DataBrowser extends React.Component {
   }
 
   handleSelect(selectedRow) {
-    this.setState({selectedFile: selectedRow && selectedRow.data});
+    this.setState({ selectedFile: selectedRow && selectedRow.data })
   }
 
   handleMultiselect(file) {
     // TODO: implement
   }
 
+  async login() {
+    return new Promise((resolve, reject) => {
+      this.datastoreServer.login('admin', 'changeit', token => {
+        if (token) {
+          resolve(token)
+        } else {
+          reject('Could not perform login.')
+        }
+      })
+    })
+  }
+
+  async listFiles() {
+    return new Promise((resolve, reject) => {
+      this.datastoreServer.list('demo-sample', '', 'true', (data) => {
+        if (!data.error) {
+          const results = data.result[1]
+          const files = results.map(result => result[1])
+          resolve(files)
+        } else {
+          reject(data.error)
+        }
+      })
+    })
+  }
+
   async load(params) {
-    return await this.state.files.map((file) => ({id: file.name, ...file}));
+    await this.login()
+    const files = await this.listFiles()
+    this.setState({ files: files })
+    console.log('Received data: ' + files)
+    return await files.map(file => ({ id: file.name, ...file }))
   }
 
   async onError(error) {
@@ -185,12 +135,13 @@ class DataBrowser extends React.Component {
   }
 
   handleShowInfoChange() {
-    this.setState({showInfo: !this.state.showInfo})
+    this.setState({ showInfo: !this.state.showInfo })
   }
 
   render() {
     const { classes } = this.props
-    const { viewType, files, selectedFile, multiselectedFiles, showInfo } = this.state
+    const { viewType, files, selectedFile, multiselectedFiles, showInfo } =
+      this.state
 
     return (
       <Paper className={classes.boundary}>
@@ -214,7 +165,16 @@ class DataBrowser extends React.Component {
                   label: 'Name',
                   sortable: true,
                   getValue: ({ row }) => row.name,
-                  renderValue: ({ row }) => <><ItemIcon file={row} classes={{ icon: classes.icon }} configuration={configuration} /> {row.name}</>,
+                  renderValue: ({ row }) => (
+                    <>
+                      <ItemIcon
+                        file={row}
+                        classes={{ icon: classes.icon }}
+                        configuration={configuration}
+                      />{' '}
+                      {row.name}
+                    </>
+                  ),
                   renderFilter: null
                 },
                 {
@@ -228,7 +188,7 @@ class DataBrowser extends React.Component {
                   label: 'Modified',
                   sortable: false,
                   getValue: ({ row }) => row.lastModifiedTime.toLocaleString()
-                },
+                }
               ]}
               loadRows={this.load}
               sort='registrationDate'
@@ -253,11 +213,13 @@ class DataBrowser extends React.Component {
               onMultiselect={this.handleMultiselect}
               configuration={configuration}
               files={files}
-              selectedFile = {selectedFile}
-              multiselectedFiles = {multiselectedFiles}
+              selectedFile={selectedFile}
+              multiselectedFiles={multiselectedFiles}
             />
           )}
-          {showInfo && selectedFile && <InfoPanel file={selectedFile} configuration={configuration} />}
+          {showInfo && selectedFile && (
+            <InfoPanel file={selectedFile} configuration={configuration} />
+          )}
         </div>
       </Paper>
     )
-- 
GitLab