xref: /aosp_15_r20/development/tools/ota_analysis/src/components/BaseFile.vue (revision 90c8c64db3049935a07c6143d7fd006e26f8ecca)
1*90c8c64dSAndroid Build Coastguard Worker<template>
2*90c8c64dSAndroid Build Coastguard Worker  <label class="file-select ma-5">
3*90c8c64dSAndroid Build Coastguard Worker    <div
4*90c8c64dSAndroid Build Coastguard Worker      class="select-button"
5*90c8c64dSAndroid Build Coastguard Worker      @dragover="dragover"
6*90c8c64dSAndroid Build Coastguard Worker      @dragleave="dragleave"
7*90c8c64dSAndroid Build Coastguard Worker      @drop="drop"
8*90c8c64dSAndroid Build Coastguard Worker    >
9*90c8c64dSAndroid Build Coastguard Worker      <span v-if="label">{{ !fileName ? label : '' }}</span>
10*90c8c64dSAndroid Build Coastguard Worker      <span v-else>Select File</span>
11*90c8c64dSAndroid Build Coastguard Worker      <div v-if="fileName"> File selected: {{ fileName }}</div>
12*90c8c64dSAndroid Build Coastguard Worker    </div>
13*90c8c64dSAndroid Build Coastguard Worker    <input
14*90c8c64dSAndroid Build Coastguard Worker      ref="file"
15*90c8c64dSAndroid Build Coastguard Worker      type="file"
16*90c8c64dSAndroid Build Coastguard Worker      accept=".zip"
17*90c8c64dSAndroid Build Coastguard Worker      @change="handleFileChange"
18*90c8c64dSAndroid Build Coastguard Worker    >
19*90c8c64dSAndroid Build Coastguard Worker  </label>
20*90c8c64dSAndroid Build Coastguard Worker</template>
21*90c8c64dSAndroid Build Coastguard Worker
22*90c8c64dSAndroid Build Coastguard Worker<script>
23*90c8c64dSAndroid Build Coastguard Workerexport default {
24*90c8c64dSAndroid Build Coastguard Worker  props: {
25*90c8c64dSAndroid Build Coastguard Worker    label: {
26*90c8c64dSAndroid Build Coastguard Worker      type: String,
27*90c8c64dSAndroid Build Coastguard Worker      default: '',
28*90c8c64dSAndroid Build Coastguard Worker    },
29*90c8c64dSAndroid Build Coastguard Worker  },
30*90c8c64dSAndroid Build Coastguard Worker  data() {
31*90c8c64dSAndroid Build Coastguard Worker    return {
32*90c8c64dSAndroid Build Coastguard Worker      fileName: '',
33*90c8c64dSAndroid Build Coastguard Worker    }
34*90c8c64dSAndroid Build Coastguard Worker  },
35*90c8c64dSAndroid Build Coastguard Worker  methods: {
36*90c8c64dSAndroid Build Coastguard Worker    handleFileChange(event) {
37*90c8c64dSAndroid Build Coastguard Worker      this.$emit('file-select', this.$refs.file.files)
38*90c8c64dSAndroid Build Coastguard Worker      this.fileName = this.$refs.file.files[0].name
39*90c8c64dSAndroid Build Coastguard Worker    },
40*90c8c64dSAndroid Build Coastguard Worker    dragover(event) {
41*90c8c64dSAndroid Build Coastguard Worker      event.preventDefault()
42*90c8c64dSAndroid Build Coastguard Worker      if (!event.currentTarget.classList.contains('file-hover')) {
43*90c8c64dSAndroid Build Coastguard Worker        event.currentTarget.classList.add('file-hover')
44*90c8c64dSAndroid Build Coastguard Worker      }
45*90c8c64dSAndroid Build Coastguard Worker    },
46*90c8c64dSAndroid Build Coastguard Worker    dragleave(event) {
47*90c8c64dSAndroid Build Coastguard Worker      event.currentTarget.classList.remove('file-hover')
48*90c8c64dSAndroid Build Coastguard Worker    },
49*90c8c64dSAndroid Build Coastguard Worker    drop(event) {
50*90c8c64dSAndroid Build Coastguard Worker      event.preventDefault()
51*90c8c64dSAndroid Build Coastguard Worker      this.$refs.file.files = event.dataTransfer.files
52*90c8c64dSAndroid Build Coastguard Worker      this.handleFileChange(event)
53*90c8c64dSAndroid Build Coastguard Worker      event.currentTarget.classList.remove('file-hover')
54*90c8c64dSAndroid Build Coastguard Worker    },
55*90c8c64dSAndroid Build Coastguard Worker  },
56*90c8c64dSAndroid Build Coastguard Worker}
57*90c8c64dSAndroid Build Coastguard Worker</script>
58*90c8c64dSAndroid Build Coastguard Worker
59*90c8c64dSAndroid Build Coastguard Worker<style scoped>
60*90c8c64dSAndroid Build Coastguard Worker.file-select > .select-button {
61*90c8c64dSAndroid Build Coastguard Worker  padding: 3rem;
62*90c8c64dSAndroid Build Coastguard Worker  border-radius: 0.3rem;
63*90c8c64dSAndroid Build Coastguard Worker  border: 4px dashed #eaebec;
64*90c8c64dSAndroid Build Coastguard Worker  text-align: center;
65*90c8c64dSAndroid Build Coastguard Worker  font-weight: bold;
66*90c8c64dSAndroid Build Coastguard Worker  cursor: pointer;
67*90c8c64dSAndroid Build Coastguard Worker}
68*90c8c64dSAndroid Build Coastguard Worker
69*90c8c64dSAndroid Build Coastguard Worker.file-select > input[type='file'] {
70*90c8c64dSAndroid Build Coastguard Worker  display: none;
71*90c8c64dSAndroid Build Coastguard Worker}
72*90c8c64dSAndroid Build Coastguard Worker
73*90c8c64dSAndroid Build Coastguard Worker.file-hover {
74*90c8c64dSAndroid Build Coastguard Worker  background-color: #95e995;
75*90c8c64dSAndroid Build Coastguard Worker}
76*90c8c64dSAndroid Build Coastguard Worker</style>