From 0dc7f8b6553da1102e276f2484937fdfdc1c108b Mon Sep 17 00:00:00 2001
From: Thilo Wischmeyer <thwischm@gmail.com>
Date: Mon, 8 Mar 2021 14:13:19 +0100
Subject: [PATCH] Replaced custom file picker with the one from vuetify

---
 frontend/src/components/ImportDialog.vue      |  9 +--
 frontend/src/components/export/DataExport.vue | 11 ++--
 .../src/components/export/InstanceExport.vue  | 11 ++--
 .../components/student_list/StudentList.vue   | 29 ++++-----
 .../student_list/StudentListReverseMapper.vue | 39 +++++-------
 frontend/src/components/util/FileSelect.vue   | 63 -------------------
 6 files changed, 41 insertions(+), 121 deletions(-)
 delete mode 100644 frontend/src/components/util/FileSelect.vue

diff --git a/frontend/src/components/ImportDialog.vue b/frontend/src/components/ImportDialog.vue
index c6c46935..3ac78726 100644
--- a/frontend/src/components/ImportDialog.vue
+++ b/frontend/src/components/ImportDialog.vue
@@ -17,9 +17,10 @@
           >rusty-hektor</a> to convert
           and pseudonomize ILIAS output.
         </p>
-        <file-select
+        <v-file-input
           v-model="hektorFile"
-          display-text="Select json file"
+          label="Select file"
+          accept="application/JSON"
         />
       </v-card-text>
       <v-card-actions>
@@ -42,14 +43,10 @@
 </template>
 
 <script>
-  import FileSelect from '@/components/util/FileSelect.vue'
   import { importData } from '@/api'
 
   export default {
     name: 'ImportDialog',
-    components: {
-      FileSelect
-    },
     data: () => {
       return {
         show: true,
diff --git a/frontend/src/components/export/DataExport.vue b/frontend/src/components/export/DataExport.vue
index 9f84ad7a..61b1213e 100644
--- a/frontend/src/components/export/DataExport.vue
+++ b/frontend/src/components/export/DataExport.vue
@@ -16,10 +16,10 @@
 
             align="center"
           >
-            <file-select
+            <v-file-input
               v-model="mapFile"
-              display-text="Select map file"
-              class="ma-3"
+              label="Map file"
+              accept="application/JSON"
             />
             <span>Without the mapping, the data will still be obfuscated.</span>
           </v-row>
@@ -85,13 +85,10 @@
 import Component, { mixins } from 'vue-class-component'
 import { getters } from '@/store/getters'
 import ax, { StudentExportItem, fetchStudentExportData } from '@/api'
-import FileSelect from '@/components/util/FileSelect.vue'
 import { mutations as mut } from '@/store/mutations'
 import { ExportType, exportMixin } from '@/components/mixins/exportMixin.ts'
 
-@Component({
-  components: { FileSelect }
-})
+@Component
 export default class DataExport extends mixins(exportMixin) {
 
   get studentMap () { return getters.state.studentMap }
diff --git a/frontend/src/components/export/InstanceExport.vue b/frontend/src/components/export/InstanceExport.vue
index be2f2457..8d81c9f7 100644
--- a/frontend/src/components/export/InstanceExport.vue
+++ b/frontend/src/components/export/InstanceExport.vue
@@ -16,10 +16,10 @@
 
             align="center"
           >
-            <file-select
+            <v-file-input
               v-model="mapFile"
-              display-text="Select map file"
-              class="ma-3"
+              label="Map file"
+              accept="application/JSON"
             />
             <span>Without the mapping, the data will still be obfuscated.</span>
           </v-row>
@@ -59,13 +59,10 @@
 import Component, { mixins } from 'vue-class-component'
 import { getters } from '@/store/getters'
 import ax, { StudentExportItem, fetchStudentExportData, fetchInstanceExportData, InstanceExportData } from '@/api'
-import FileSelect from '@/components/util/FileSelect.vue'
 import { mutations as mut } from '@/store/mutations'
 import { ExportType, exportMixin } from '@/components/mixins/exportMixin'
 
-@Component({
-  components: { FileSelect }
-})
+@Component
 export default class DataExport extends mixins(exportMixin) {
   exportDialog = true
   mapFile: File | null = null
diff --git a/frontend/src/components/student_list/StudentList.vue b/frontend/src/components/student_list/StudentList.vue
index 759f4362..6d01d081 100644
--- a/frontend/src/components/student_list/StudentList.vue
+++ b/frontend/src/components/student_list/StudentList.vue
@@ -1,28 +1,29 @@
 <template>
   <v-card>
-    <v-card-title>
-      <span class="title">
+    <v-toolbar flat>
+      <v-toolbar-title>
         Participants
-      </span>
-      <student-list-reverse-mapper class="ml-4" />
+      </v-toolbar-title>
       <v-spacer />
+      <v-toolbar-items />
       <v-text-field
         v-model="search"
         append-icon="search"
         label="Search"
         single-line
         hide-details
+        class="mr-6"
       />
-      <v-card-actions>
-        <v-btn
-          icon
-          @click="refresh"
-        >
-          <v-icon>refresh</v-icon>
-        </v-btn>
-        <student-list-menu />
-      </v-card-actions>
-    </v-card-title>
+      <student-list-reverse-mapper />
+      <v-btn
+        icon
+        @click="refresh"
+      >
+        <v-icon>refresh</v-icon>
+      </v-btn>
+      <student-list-menu />
+    </v-toolbar>
+    <v-divider />
     <v-data-table
       :headers="headers"
       :items="studentListItems"
diff --git a/frontend/src/components/student_list/StudentListReverseMapper.vue b/frontend/src/components/student_list/StudentListReverseMapper.vue
index 70be9ad0..e6a1d80a 100644
--- a/frontend/src/components/student_list/StudentListReverseMapper.vue
+++ b/frontend/src/components/student_list/StudentListReverseMapper.vue
@@ -1,33 +1,23 @@
 <template>
-  <v-row
-
-    align="center"
-  >
-    <file-select
-      v-model="file"
-      display-text="Select map file"
-    />
-    <v-tooltip top>
-      <template #activator="{ on }">
-        <v-btn
-          icon
-          v-on="on"
-          @click="readMapFileAndApply"
-        >
-          <v-icon>vpn_key</v-icon>
-        </v-btn>
-      </template>
-      <span>Apply mapping</span>
-    </v-tooltip>
-  </v-row>
+  <v-tooltip top>
+    <template #activator="{ on }">
+      <div v-on="on">
+        <v-file-input
+          v-model="file"
+          hide-input
+          prepend-icon="vpn_key"
+          accept="application/JSON"
+          @change="readMapFileAndApply"
+        />
+      </div>
+    </template>
+    <span>Apply mapping</span>
+  </v-tooltip>
 </template>
 
 <script>
-import FileSelect from '@/components/util/FileSelect'
-
 export default {
   name: 'StudentListReverseMapper',
-  components: { FileSelect },
   data () {
     return {
       file: null,
@@ -36,6 +26,7 @@ export default {
   },
   methods: {
     readMapFileAndApply () {
+      console.debug('hallo')
       this.fileReader.onload = event => {
         const studentMap = JSON.parse(event.target.result)
         this.reverseMapStudents(studentMap)
diff --git a/frontend/src/components/util/FileSelect.vue b/frontend/src/components/util/FileSelect.vue
deleted file mode 100644
index ccf0463c..00000000
--- a/frontend/src/components/util/FileSelect.vue
+++ /dev/null
@@ -1,63 +0,0 @@
-<template>
-  <label class="file-select">
-    <div
-      id="selectButton"
-      class="select-button"
-    >
-      <span v-if="value">Selected: {{ value.name }}</span>
-      <span v-else>{{ displayText }}</span>
-    </div>
-    <input
-      id="file-input"
-      type="file"
-      @change="handleFileChange"
-    >
-  </label>
-</template>
-
-<script>
-export default {
-  props: {
-    value: File,
-    displayText: {
-      type: String,
-      default: 'Select File'
-    }
-  },
-  data() {
-    return {
-      hover: false,
-    }
-  },
-  methods: {
-    handleFileChange (e) {
-      this.$emit('input', e.target.files[0])
-    },
-  }
-}
-</script>
-
-<style scoped>
-  .file-select > .select-button {
-    padding: 0.5rem;
-
-    color: white;
-    background-color: #2EA169;
-
-    border-radius: .3rem;
-
-    text-align: center;
-    font-weight: bold;
-    max-width: fit-content;
-  }
-
-  .select-button:hover {
-    background-color: #2f7451;
-    cursor: pointer;
-  }
-
-
-  .file-select > input[type="file"] {
-    display: none;
-  }
-</style>
-- 
GitLab